From 2905e90a72701bb3459ef8f52df7ea3a220f6682 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 30 Jan 2026 10:12:48 -0600 Subject: [PATCH 01/54] fix(pedimentos): change not_affect_usd_value and not_affect_customs_value types from bool to int in DTOs fix(main): enable redirect_slashes in FastAPI app configuration --- .../a76/pedmientos/dtos/pedimento_decrementables.py | 8 ++++---- .../a76/pedmientos/dtos/pedimento_incrementables.py | 8 ++++---- backend/main.py | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py index 796bfee1..c9718994 100644 --- a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py +++ b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py @@ -17,10 +17,10 @@ class PedimentoDecrementablesBase(BaseModel): others: Optional[Decimal] = Field(None, description="Others") currency: Optional[str] = Field(None, max_length=3, description="Currency") currency_factor: Optional[Decimal] = Field(None, description="Currency factor") - not_affect_usd_value: Optional[bool] = Field( + not_affect_usd_value: Optional[int] = Field( None, description="Not affect USD value" ) - not_affect_customs_value: Optional[bool] = Field( + not_affect_customs_value: Optional[int] = Field( None, description="Not affect customs value" ) @@ -41,8 +41,8 @@ class PedimentoDecrementablesUpdate(BaseModel): others: Optional[Decimal] = None currency: Optional[str] = Field(None, max_length=3) currency_factor: Optional[Decimal] = None - not_affect_usd_value: Optional[bool] = None - not_affect_customs_value: Optional[bool] = None + not_affect_usd_value: Optional[int] = None + not_affect_customs_value: Optional[int] = None class PedimentoDecrementablesResponse(PedimentoDecrementablesBase): diff --git a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py index c8100d01..acc6312e 100644 --- a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py +++ b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py @@ -18,10 +18,10 @@ class PedimentoIncrementablesBase(BaseModel): deductibles: Optional[Decimal] = Field(None, description="Deductibles") currency: Optional[str] = Field(None, max_length=3, description="Currency") currency_factor: Optional[Decimal] = Field(None, description="Currency factor") - not_affect_usd_value: Optional[bool] = Field( + not_affect_usd_value: Optional[int] = Field( None, description="Not affect USD value" ) - not_affect_customs_value: Optional[bool] = Field( + not_affect_customs_value: Optional[int] = Field( None, description="Not affect customs value" ) @@ -43,8 +43,8 @@ class PedimentoIncrementablesUpdate(BaseModel): deductibles: Optional[Decimal] = None currency: Optional[str] = Field(None, max_length=3) currency_factor: Optional[Decimal] = None - not_affect_usd_value: Optional[bool] = None - not_affect_customs_value: Optional[bool] = None + not_affect_usd_value: Optional[int] = None + not_affect_customs_value: Optional[int] = None class PedimentoIncrementablesResponse(PedimentoIncrementablesBase): diff --git a/backend/main.py b/backend/main.py index b7ed6b69..b5a0c59a 100644 --- a/backend/main.py +++ b/backend/main.py @@ -45,6 +45,7 @@ app = FastAPI( docs_url="/api/docs" if settings.DEBUG else None, redoc_url="/api/redoc" if settings.DEBUG else None, openapi_url="/api/openapi.json" if settings.DEBUG else None, + redirect_slashes=True, ) # Registrar manejadores de excepciones From d96b851c06efd56aa1988cc0d1f3e027b115fe6b Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 30 Jan 2026 10:24:48 -0600 Subject: [PATCH 02/54] fix(pedimentos): remove trailing slash from delete API endpoint URL --- backend/main.py | 1 - frontend/src/lib/api/dashboard/a76/pedimentos.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/main.py b/backend/main.py index b5a0c59a..b7ed6b69 100644 --- a/backend/main.py +++ b/backend/main.py @@ -45,7 +45,6 @@ app = FastAPI( docs_url="/api/docs" if settings.DEBUG else None, redoc_url="/api/redoc" if settings.DEBUG else None, openapi_url="/api/openapi.json" if settings.DEBUG else None, - redirect_slashes=True, ) # Registrar manejadores de excepciones diff --git a/frontend/src/lib/api/dashboard/a76/pedimentos.ts b/frontend/src/lib/api/dashboard/a76/pedimentos.ts index 574c447f..a5069c9f 100644 --- a/frontend/src/lib/api/dashboard/a76/pedimentos.ts +++ b/frontend/src/lib/api/dashboard/a76/pedimentos.ts @@ -324,5 +324,5 @@ export const pedimentosApi = { * @param id - ID del pedimento a eliminar * @param companyId - ID de la compañía (por defecto 1) */ - delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`) + delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`) }; From e689d1f3a2484563cca2bde53e1358d57d62b1b8 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 30 Jan 2026 10:44:29 -0600 Subject: [PATCH 03/54] Refactor code structure for improved readability and maintainability --- frontend/src/lib/date-utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/date-utils.ts b/frontend/src/lib/date-utils.ts index 20991a30..e743ee02 100644 --- a/frontend/src/lib/date-utils.ts +++ b/frontend/src/lib/date-utils.ts @@ -22,7 +22,9 @@ export function prepareDateForBackend(dateStr: string, timeStr: string = '00:00' // Combinar fecha y hora usando la zona horaria local const dateTime = toCalendarDateTime(date, time); const zonedDateTime = dateTime.toDate(localTimeZone); - return zonedDateTime.toISOString(); + // Convertir a objeto Date nativo de JavaScript para obtener ISO string correcto + const jsDate = new Date(zonedDateTime.toString()); + return jsDate.toISOString(); } catch (e) { console.error('Error parsing date:', e); return null; From b8e25cd2e15d72a8121fef82f88a8c48db74d329 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 30 Jan 2026 10:55:29 -0600 Subject: [PATCH 04/54] Refactor code structure for improved readability and maintainability --- .../a76/clients_and_providers/routes.py | 7 +- .../api/v1/modules/a76/invoices/schemas.py | 18 +- .../reports/movements/invoices/__init__.py | 0 .../movements/invoices/movement_service.py | 309 +++ .../a76/reports/movements/invoices/routes.py | 632 +++++ .../a76/reports/movements/invoices/schemas.py | 564 +++++ .../reports/movements/invoices/services.py | 112 + .../movements/invoices/services/__init__.py | 26 + .../movements/invoices/services/base.py | 76 + .../invoices/services/database_helpers.py | 500 ++++ .../movements/invoices/services/definitive.py | 372 +++ .../invoices/services/exchange_rate.py | 172 ++ .../movements/invoices/services/export.py | 435 ++++ .../invoices/services/export_repair.py | 400 ++++ .../invoices/services/query_builders.py | 877 +++++++ .../invoices/services/query_builders.py.bak | 877 +++++++ .../movements/invoices/services/repair.py | 391 +++ .../movements/invoices/services/temporary.py | 386 +++ .../movements/invoices/services_old.py | 2115 +++++++++++++++++ backend/api/v1/modules/a76/router.py | 7 + .../api/dashboard/a76/invoice-movements.ts | 184 ++ .../src/lib/components/sidebar/modules.ts | 12 + .../lib/components/ui/icons/FolderIcon.svelte | 6 + frontend/src/routes/dashboard/+layout.svelte | 2 +- .../edit/[[id]]/+page.svelte | 2 +- .../reports/invoices/+page.server.ts | 15 + .../dashboard/reports/invoices/+page.svelte | 1394 +++++++++++ pnpm-lock.yaml | 157 -- 28 files changed, 9878 insertions(+), 170 deletions(-) create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/routes.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/base.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/export.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services_old.py create mode 100644 frontend/src/lib/api/dashboard/a76/invoice-movements.ts create mode 100644 frontend/src/lib/components/ui/icons/FolderIcon.svelte create mode 100644 frontend/src/routes/dashboard/reports/invoices/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reports/invoices/+page.svelte delete mode 100644 pnpm-lock.yaml diff --git a/backend/api/v1/modules/a76/clients_and_providers/routes.py b/backend/api/v1/modules/a76/clients_and_providers/routes.py index e1db85d7..b96c7442 100644 --- a/backend/api/v1/modules/a76/clients_and_providers/routes.py +++ b/backend/api/v1/modules/a76/clients_and_providers/routes.py @@ -7,7 +7,7 @@ from typing import List, Optional from core.database import get_core_db from core.security import get_current_user, validate_access_to_resource from fastapi import APIRouter, Depends, HTTPException, Query -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, joinedload from api.v1.common.tenant_crud_routes import TenantCRUDRoutes from .models import ClientOrProviderEnum @@ -40,7 +40,10 @@ async def get_clients_and_providers( """Get clients and providers""" tenant_id = validate_access_to_resource(db, company_id, current_user) - query = db.query(ClientProvider).filter( + query = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter( ClientProvider.tenant_id == tenant_id, ClientProvider.company_id == company_id, ) diff --git a/backend/api/v1/modules/a76/invoices/schemas.py b/backend/api/v1/modules/a76/invoices/schemas.py index af111dc8..88b7cf0c 100644 --- a/backend/api/v1/modules/a76/invoices/schemas.py +++ b/backend/api/v1/modules/a76/invoices/schemas.py @@ -113,17 +113,17 @@ class InvoiceComplianceMxBase(BaseModel): manifest_number: Optional[str] = Field( None, max_length=15, description="Manifest number" ) - provider_header: str = Field(None, max_length=20, description="Provider header") - provider_id: int = Field(None, description="Provider ID") - sold_to_header: str = Field(None, max_length=20, description="Sold to header") - sold_to_id: int = Field(None, description="Sold to ID") - shipped_to_header: str = Field(None, max_length=20, description="Shipped to header") - shipped_to_id: int = Field(None, description="Shipped to ID") - shipped_by_header: Optional[int] = Field( + provider_header: Optional[str] = Field(None, max_length=20, description="Provider header") + provider_id: Optional[int] = Field(None, description="Provider ID") + sold_to_header: Optional[str] = Field(None, max_length=20, description="Sold to header") + sold_to_id: Optional[int] = Field(None, description="Sold to ID") + shipped_to_header: Optional[str] = Field(None, max_length=20, description="Shipped to header") + shipped_to_id: Optional[int] = Field(None, description="Shipped to ID") + shipped_by_header: Optional[str] = Field( None, max_length=20, description="Shipped by header" ) shipped_by_id: Optional[int] = Field(None, description="Shipped by ID") - customs_broker_id: int = Field(None, description="Customs broker ID") + customs_broker_id: Optional[int] = Field(None, description="Customs broker ID") customs_broker_us_id: Optional[int] = Field( None, description="US customs broker ID" ) @@ -141,7 +141,7 @@ class InvoiceComplianceMxBase(BaseModel): ) value_method: Optional[str] = Field(None, max_length=2, description="Value method") act_value: Optional[str] = Field(None, max_length=5, description="Act value") - is_pedimento_pending: bool = Field(..., description="Is pedimento pending") + is_pedimento_pending: Optional[bool] = Field(False, description="Is pedimento pending") is_owner_of_goods: Optional[bool] = Field(False, description="Is owner of goods") generate_balances: Optional[bool] = Field(False, description="Generate balances") was_reviewed_by_company: Optional[bool] = Field( diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/__init__.py b/backend/api/v1/modules/a76/reports/movements/invoices/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py new file mode 100644 index 00000000..303dd6e8 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py @@ -0,0 +1,309 @@ +""" +Unified service for invoice movement operations. +This service delegates to specialized handlers for each import type. +""" + +import logging +from sqlalchemy.orm import Session +from typing import List + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + ExportRepairFilter, + AllMovementsFilter, + MovementItem, + MovementItemDetailed +) +from .services.temporary import TemporaryImportService +from .services.definitive import DefinitiveImportService +from .services.repair import RepairImportService +from .services.export import ExportService +from .services.export_repair import ExportRepairService + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Unified service for handling all types of movements. + Delegates to specialized services for each movement type. + """ + + def __init__(self): + self.temporary_service = TemporaryImportService() + self.definitive_service = DefinitiveImportService() + self.repair_service = RepairImportService() + self.export_service = ExportService() + self.export_repair_service = ExportRepairService() + + # ===== TEMPORARY IMPORTS ===== + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """Get temporary import movements (normal mode - grouped by invoice).""" + return self.temporary_service.get_movements(db, filters) + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """Get temporary import movements (detailed mode - line by line).""" + return self.temporary_service.get_movements_detailed(db, filters) + + # ===== DEFINITIVE IMPORTS ===== + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """Get definitive import movements (normal mode - grouped by invoice).""" + return self.definitive_service.get_movements(db, filters) + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """Get definitive import movements (detailed mode - line by line).""" + return self.definitive_service.get_movements_detailed(db, filters) + + # ===== REPAIR IMPORTS ===== + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """Get repair import movements (normal mode - grouped by invoice).""" + return self.repair_service.get_movements(db, filters) + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """Get repair import movements (detailed mode - line by line).""" + return self.repair_service.get_movements_detailed(db, filters) + + # ===== EXPORTS ===== + + def get_export_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """Get export movements (normal mode - grouped by invoice).""" + return self.export_service.get_movements(db, filters) + + def get_export_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """Get export movements (detailed mode - line by line).""" + return self.export_service.get_movements_detailed(db, filters) + + # ===== EXPORT REPAIRS ===== + + def get_export_repair_movements( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItem]: + """Get export repair movements (normal mode - grouped by invoice).""" + return self.export_repair_service.get_movements(db, filters) + + def get_export_repair_movements_detailed( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItemDetailed]: + """Get export repair movements (detailed mode - line by line).""" + return self.export_repair_service.get_movements_detailed(db, filters) + + # ===== ALL MOVEMENTS ===== + + def get_all_movements( + self, + db: Session, + filters: AllMovementsFilter + ) -> List[MovementItem]: + """ + Get all invoice movements (all types combined). + + This combines: + - Temporary imports + - Definitive imports + - Repair imports + - All export types + - Export repairs + + Returns a unified list sorted by date. + """ + all_movements = [] + + # Convert AllMovementsFilter to individual filter types + # We'll use the same filter parameters for all queries + + # Determine which services to call based on operation_type filter + should_fetch_imports = filters.operation_type in [None, 'imp'] + should_fetch_exports = filters.operation_type in [None, 'exp'] + + logger.info(f"Operation type filter: {filters.operation_type}") + logger.info(f"Should fetch imports: {should_fetch_imports}") + logger.info(f"Should fetch exports: {should_fetch_exports}") + + # 1. Temporary Imports + if should_fetch_imports: + try: + temp_filter = ImportTemporaryFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type='Normal', # Always use normal mode for combined report + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default' # Required field + ) + temp_movements = self.temporary_service.get_movements(db, temp_filter) + all_movements.extend(temp_movements) + logger.info(f"Added {len(temp_movements)} temporary import movements") + except Exception as e: + db.rollback() # Rollback failed transaction + logger.warning(f"Error fetching temporary imports: {e}") + + # 2. Definitive Imports + if should_fetch_imports: + try: + def_filter = ImportDefinitiveFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type='Normal', + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL' # Required field - include all definitive types + ) + def_movements = self.definitive_service.get_movements(db, def_filter) + all_movements.extend(def_movements) + logger.info(f"Added {len(def_movements)} definitive import movements") + except Exception as e: + db.rollback() # Rollback failed transaction + logger.warning(f"Error fetching definitive imports: {e}") + + # 3. Repair Imports + if should_fetch_imports: + try: + repair_filter = ImportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type='Normal', + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + discharge_filter='ALL' # Required field - include all discharge statuses + ) + repair_movements = self.repair_service.get_movements(db, repair_filter) + all_movements.extend(repair_movements) + logger.info(f"Added {len(repair_movements)} repair import movements") + except Exception as e: + db.rollback() # Rollback failed transaction + logger.warning(f"Error fetching repair imports: {e}") + + # 4. Exports (Definitive) + if should_fetch_exports: + try: + export_filter = ExportFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type='Normal', + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', # Required field + discharge_filter='ALL', # Required field + use_transport_method=False # Required field + ) + export_movements = self.export_service.get_movements(db, export_filter) + all_movements.extend(export_movements) + logger.info(f"Added {len(export_movements)} export movements") + except Exception as e: + db.rollback() # Rollback failed transaction + logger.warning(f"Error fetching exports: {e}") + + # 5. Export Repairs + if should_fetch_exports: + try: + export_repair_filter = ExportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type='Normal', + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', # Required field + discharge_filter='ALL' # Required field + ) + export_repair_movements = self.export_repair_service.get_movements(db, export_repair_filter) + all_movements.extend(export_repair_movements) + logger.info(f"Added {len(export_repair_movements)} export repair movements") + except Exception as e: + db.rollback() # Rollback failed transaction + logger.warning(f"Error fetching export repairs: {e}") + + # Sort all movements by date (Fecha field) + # Handle mixed datetime and string types + def get_sort_key(movement): + fecha = movement.FechaFactura + if not fecha: + return "" + # Convert datetime to string for consistent comparison + if hasattr(fecha, 'strftime'): + return fecha.strftime('%Y%m%d') + return str(fecha) + + all_movements.sort(key=get_sort_key) + + logger.info(f"Total movements combined: {len(all_movements)}") + return all_movements + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py new file mode 100644 index 00000000..e6b8a37e --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py @@ -0,0 +1,632 @@ +import logging +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.orm import Session +from typing import List + +from core.database import get_core_db +from core.security import get_current_user +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + ExportRepairFilter, + AllMovementsFilter, + MovementItem, + MovementItemDetailed +) +from .movement_service import movement_service + +logger = logging.getLogger(__name__) + +router = APIRouter( + tags=["Reports - Movement Invoices"] +) + + +@router.post( + "/temporary", + response_model=List[MovementItem], + summary="Get Temporary Import Movements", + description=""" + Retrieve temporary import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADOTEMPORAL' (Fill Temporary) logic from the legacy system. + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_temporary_import_movements( + filters: ImportTemporaryFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get temporary import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting temporary import movements" + ) + movements = movement_service.get_temporary_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} movements") + return movements + except Exception as e: + logger.error(f"Error fetching movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing import temporary movements: {str(e)}" + ) + + +@router.post( + "/temporary-detailed", + response_model=List[MovementItemDetailed], + summary="Get Detailed Temporary Import Movements", + description=""" + Retrieve detailed temporary import movements (line by line) from legacy database. + This endpoint corresponds to the 'LLENADOTEMPORAL - DETALLADO' logic from the legacy system. + + Each line/partida is returned separately with complete information including: + - Provider and buyer details (name, RFC, Tax ID) + - Customs broker information + - Item descriptions and specifications + - Series information + - All related metadata + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_temporary_import_movements_detailed( + filters: ImportTemporaryFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed temporary import movements (line by line) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of detailed movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting DETAILED temporary import movements" + ) + movements = movement_service.get_temporary_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed movements") + return movements + except Exception as e: + logger.error(f"Error fetching detailed movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed import temporary movements: {str(e)}" + ) + + +@router.post( + "/definitive", + response_model=List[MovementItem], + summary="Get Definitive Import Movements", + description=""" + Retrieve definitive import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADODEFINITIVO - NORMAL' logic from the legacy system. + + Definitive imports are aggregated by invoice number and can be filtered by: + - Movement type (COMEX or IMPDF based on ProvImpoDefCR field) + - Date range (invoice date or payment date) + - Provider and buyer + - Pedimento code + - Status (active or including cancelled) + + **Special Features**: + - Supports shelter company logic for exchange rate calculations + - MetTrans# = 1 logic for specific pedimento types (1, 4, 98E) + - Retrieves driver badge information + - Handles rectification pedimento lookups + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_definitive_import_movements( + filters: ImportDefinitiveFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get definitive import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting definitive import movements" + ) + movements = movement_service.get_definitive_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} definitive movements") + return movements + except Exception as e: + logger.error(f"Error fetching definitive movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing definitive import movements: {str(e)}" + ) + + +@router.post( + "/definitive-detailed", + response_model=List[MovementItemDetailed], + summary="Get Detailed Definitive Import Movements", + description=""" + Retrieve detailed definitive import movements (line by line) from legacy database. + This endpoint corresponds to the 'LLENADODEFINITIVO - DETALLADO' logic from the legacy system. + + Each line/partida is returned separately with complete information including: + - Provider and buyer details (name, RFC, Tax ID) + - Customs broker information + - Item descriptions and specifications + - Series information from QSeriesDef table + - All related metadata + + **Special Logic**: + - Only Partidas (EsSubPartida = 'P') have values calculated + - Subpartidas (EsSubPartida = 'S') return with zero values + - Series formatted as: "1) SERIE123. Modelo: MOD1. Parte: PART1 | 2) SERIE456..." + - Exchange rate calculation supports shelter and non-shelter logic + - MetTrans# = 1 logic for pedimento types 1, 4, 98E + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_definitive_import_movements_detailed( + filters: ImportDefinitiveFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed definitive import movements (line by line) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of detailed movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting DETAILED definitive import movements" + ) + movements = movement_service.get_definitive_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed definitive movements") + return movements + except Exception as e: + logger.error(f"Error fetching detailed definitive movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed definitive import movements: {str(e)}" + ) + + +@router.post( + "/repair", + response_model=List[MovementItem], + summary="Get Repair Import Movements", + description=""" + Retrieve repair import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADOIMP_REPARACION - NORMAL' logic from the legacy system. + + Repair imports are aggregated by invoice number and can be filtered by: + - Discharge status (SiDes: discharged, NoDes: not discharged, ALL: no filter) + - Date range (invoice date or payment date) + - Provider and buyer + - Pedimento code + - Status (active or including cancelled) + + **Special Features**: + - Excludes regime changes (EsCambioRegimen <> 'S') + - Supports discharge filter (unique to repair imports) + - Exchange rate calculation with shelter/non-shelter logic + - MetTrans# = 1 logic for specific pedimento types (1, 4, 98E) + - Retrieves driver badge information + + **Database Tables**: + - QFacImpRep: Repair import invoices + - QEqiMaqRep: Repair import items/partidas + - QPedimentos: Pedimentos (customs declarations) + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_repair_import_movements( + filters: ImportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get repair import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting repair import movements" + ) + movements = movement_service.get_repair_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} repair movements") + return movements + except Exception as e: + logger.error(f"Error fetching repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing repair import movements: {str(e)}" + ) + + +@router.post( + "/repair-detailed", + response_model=List[MovementItemDetailed], + summary="Get detailed repair import movements", + description=""" + Retrieve detailed repair import movements (IMPRE) with individual partida lines. + + **LLENADOIMP_REPARACION - DETALLADO** + + Returns individual partida (line item) records for repair imports with full detail including: + - Complete invoice and customs clearance information + - Series, model, and part numbers for each item + - Client/supplier and sold-to information with tax IDs + - Exchange rate calculations (MN/ME) based on filter options + - Customs agent and customs section details + - Driver badge unique number + - All partida-level fields (part number, descriptions, quantities, weights, etc.) + + **Discharge Filter Options:** + - `SiDes`: Only include discharged items (Descarga = 1) + - `NoDes`: Only include non-discharged items (Descarga = 0) + - `ALL`: Include all items regardless of discharge status + + **Database Tables Used:** + - QFacImpRep: Repair import invoices + - QPedimentos: Customs declarations + - QEqiMaqRep: Repair import partidas (line items) + - QSeriesImpoRep: Series information + - GClientesPro: Suppliers + - GCliVendido: Sold-to clients + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers (for badge numbers) + - GTipoCambio: Exchange rates + """, + tags=["Import Movements - Repair"] +) +async def get_import_repair_movements_detailed( + filters: ImportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed repair import movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed repair movements") + movements = movement_service.get_repair_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed repair partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed repair import movements: {str(e)}" + ) + + +@router.post( + "/export", + response_model=List[MovementItem], + summary="Get export movements", + description=""" + Retrieve export movements (EXPO DEF) grouped by invoice. + + **LLENADOEXPORTACION - NORMAL** + + Returns aggregated data grouped by invoice number for export movements. + + **Movement Type Options:** + - `AFIJO`: Fixed assets + - `NODES`: No discharge + - `SCRAP`: Scrap materials + - `REEXP`: Re-exports + - `DONAC`: Donations + - `VEMEX`: Sales to Mexico + - `ALL`: All movement types + + **Discharge Filter Options:** + - `SiDes`: Only discharged items (Descarga = 1) + - `NoDes`: Only non-discharged items (Descarga = 0) + - `ALL`: All items regardless of discharge status + + **Database Tables Used:** + - QFacExp: Export invoices + - QEqeMaq: Export partidas (line items) + - QPedimentos: Customs declarations + - QClaAct: Part classifications + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers + - GTipoCambio: Exchange rates + + Automatically excludes regime changes (EsCambioRegimen = 'N') + """, + tags=["Export Movements"] +) +async def get_export_movements( + filters: ExportFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get export movements based on filter criteria. + Returns aggregated data grouped by invoice. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting export movements") + movements = movement_service.get_export_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} export movements") + return movements + except Exception as e: + logger.error(f"Error fetching export movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing export movements: {str(e)}" + ) + + +@router.post( + "/export-detailed", + response_model=List[MovementItemDetailed], + summary="Get detailed export movements", + description=""" + Retrieve detailed export movements with individual partida lines. + + **LLENADOEXPORTACION - DETALLADO** + + Returns individual partida (line item) records for exports with full detail including: + - Complete invoice and customs clearance information + - Series, model, and part numbers for each item + - Client/supplier and buyer information with tax IDs + - Exchange rate calculations (MN/ME) based on filter options + - Customs agent and customs section details + - Driver badge unique number + - All partida-level fields + + **Movement Type Options:** + - `AFIJO`: Fixed assets + - `NODES`: No discharge + - `SCRAP`: Scrap materials + - `REEXP`: Re-exports + - `DONAC`: Donations + - `VEMEX`: Sales to Mexico + - `ALL`: All movement types + + **Discharge Filter Options:** + - `SiDes`: Only discharged items + - `NoDes`: Only non-discharged items + - `ALL`: All items + + **Database Tables Used:** + - QFacExp: Export invoices + - QEqeMaq: Export partidas + - QSeriesExpo: Serial numbers + - QPedimentos: Customs declarations + - GClientesPro: Suppliers + - GCliVendido: Buyers + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers + - GTipoCambio: Exchange rates + """, + tags=["Export Movements"] +) +async def get_export_movements_detailed( + filters: ExportFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed export movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed export movements") + movements = movement_service.get_export_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed export partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed export movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed export movements: {str(e)}" + ) + + +@router.post("/export-repair", response_model=List[MovementItem]) +def get_export_repair_movements( + filters: ExportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + **LLENADOEXP_REPARACION - NORMAL** + + Get export repair movements (EXPO REP) based on filter criteria. + Groups results by invoice (FacturaExpo). + + Clarion logic: + - Query from QFacExpRep, QEqeMaqRep tables + - Filters: date range (FF/FP), provider, buyer, pedimento code + - Movement types: AFIJO, NODES + - Discharge filter: SiDes, NoDes, or ALL + - Calculates totals from partidas where EsSubpartida = 'P' + - Exchange rate logic based on currency type and Scaii.ini MetTrans + - Always filters by EsCambioRegimen = 'N' + """ + try: + logger.info(f"User {current_user.get('sub')} requesting export repair movements") + movements = movement_service.get_export_repair_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} export repair invoices") + return movements + except Exception as e: + logger.error(f"Error fetching export repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing export repair movements: {str(e)}" + ) + + +@router.post("/export-repair-detailed", response_model=List[MovementItemDetailed]) +def get_export_repair_movements_detailed( + filters: ExportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed export repair movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed export repair movements") + movements = movement_service.get_export_repair_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed export repair partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed export repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed export repair movements: {str(e)}" + ) + + +@router.post( + "/all", + response_model=List[MovementItem], + summary="Get All Invoice Movements", + description=""" + Retrieve all invoice movements (imports and exports of all types) from database. + This endpoint combines temporary, definitive, and repair imports with all export types. + + Use this when "TODAS" checkbox is selected to get a comprehensive view of all movements + regardless of their specific type. + """ +) +def get_all_movements( + filters: AllMovementsFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get all invoice movements (all types combined) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of all movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting all invoice movements" + ) + movements = movement_service.get_all_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} total movements") + return movements + except Exception as e: + logger.error(f"Error fetching all movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing all movements: {str(e)}" + ) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py new file mode 100644 index 00000000..966868ed --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py @@ -0,0 +1,564 @@ +from typing import Optional +from pydantic import BaseModel, Field +from datetime import datetime, date +from enum import Enum + + +class RangeType(str, Enum): + """Date range type for filtering""" + INVOICE_DATE = "FF" # Filter by invoice date + PAYMENT_DATE = "FP" # Filter by payment date + + +class ReportType(str, Enum): + """Report type""" + NORMAL = "Normal" + DETAILED = "Detallado" + + +class CurrencyType(str, Enum): + """Currency type for calculations""" + FOREIGN = "ME" # Foreign currency (Moneda Extranjera) + LOCAL = "MN" # Local currency (Moneda Nacional) + + +class ExchangeRateType(str, Enum): + """Exchange rate calculation type""" + PAYMENT = "FP" # Use payment date + INVOICE = "FF" # Use invoice date + + +class MovementTypeFilter(str, Enum): + """Movement type filter for definitive imports""" + COMEX = "COMEX" # ProvImpoDefCR = 'P' + IMPDF = "IMPDF" # ProvImpoDefCR != 'P' + ALL = "ALL" # No filter + + +class DischargeFilter(str, Enum): + """Discharge filter for repair imports""" + DISCHARGED = "SiDes" # RepPim.Descarga = 1 + NOT_DISCHARGED = "NoDes" # RepPim.Descarga = 0 + ALL = "ALL" # No filter + + +class ExportMovementType(str, Enum): + """Export movement type filter""" + AFIJO = "AFIJO" # Fixed assets + NODES = "NODES" # No discharge + SCRAP = "SCRAP" # Scrap + REEXP = "REEXP" # Re-export + DONAC = "DONAC" # Donation + VEMEX = "VEMEX" # Sale to Mexico + ALL = "ALL" # All types + + +class AllMovementsFilter(BaseModel): + """Filters for all movements query (all types combined)""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + operation_type: Optional[str] = Field( + default=None, + description="Filter by operation type: 'imp' for imports only, 'exp' for exports only, None for all" + ) + + +class ImportTemporaryFilter(BaseModel): + """Filters for temporary import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + + +class ImportDefinitiveFilter(BaseModel): + """Filters for definitive import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: MovementTypeFilter = Field( + default=MovementTypeFilter.ALL, + description="Movement type filter: COMEX, IMPDF, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + use_transport_method: bool = Field( + default=False, + description="Use MetTrans# = 1 logic for specific pedimento types" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + +class MovementItem(BaseModel): + """Movement item representing a temporary import invoice""" + Factura: Optional[str] = Field(None, description="Invoice number") + Pedimento: Optional[str] = Field(None, description="Pedimento number") + FechaFactura: Optional[datetime] = Field(None, description="Invoice date") + Estatus: Optional[str] = Field(None, description="Status (AC=Active, etc)") + ClavePed: Optional[str] = Field(None, description="Pedimento code") + TipoMovTemDef: Optional[str] = Field(None, description="Movement type (IMTEM=Temporary Import)") + EsCambioRegimen: Optional[str] = Field(None, description="Is regime change (S/N)") + ValorMPTemp: Optional[float] = Field(None, description="Temporary raw material value") + ValorComercialMN: Optional[float] = Field(None, description="Commercial value in MN") + TipoCambio: Optional[float] = Field(None, description="Exchange rate used") + ValorAgre: Optional[float] = Field(default=0.0, description="Aggregate value") + TipoExpo: Optional[str] = Field(default='', description="Export type") + PedimentoR1: Optional[str] = Field(None, description="Rectification pedimento") + EDocument: Optional[str] = Field(None, description="Electronic document") + NumOperacionVU: Optional[str] = Field(None, description="VU operation number") + BaseDeDatos: Optional[str] = Field(None, description="Source database name") + NumGafUni: Optional[str] = Field(None, description="Unique badge number (driver)") + UsuarioCap: Optional[str] = Field(None, description="Capture user") + UsuarioAcr: Optional[str] = Field(None, description="Update user") + Fecha_Pago: Optional[datetime] = Field(None, description="Payment date") + NumCaja: Optional[str] = Field(None, description="Box/Container number") + Pedimento18: Optional[str] = Field(None, description="18-digit pedimento") + AduanaCru: Optional[str] = Field(None, description="Crossing customs") + Lote: Optional[str] = Field(None, description="Lot number") + + model_config = { + "json_schema_extra": { + "example": { + "Factura": "F-2024-001", + "Pedimento": "24 47 3807 8001234", + "FechaFactura": "2024-01-15T00:00:00", + "Estatus": "AC", + "ClavePed": "IM", + "TipoMovTemDef": "IMTEM", + "ValorMPTemp": 10000.50, + "TipoCambio": 17.25 + } + } + } + + +class ImportRepairFilter(BaseModel): + """Filters for repair import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Discharge filter: SiDes (discharged), NoDes (not discharged), or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + use_transport_method: bool = Field( + default=False, + description="Use MetTrans# = 1 logic for specific pedimento types" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + + +class MovementItemDetailed(BaseModel): + """Detailed movement item with all line-level information""" + Linea: Optional[int] = Field(None, description="Line number") + Factura: Optional[str] = Field(None, description="Invoice number") + Pedimento: Optional[str] = Field(None, description="Pedimento number") + FechaFactura: Optional[datetime] = Field(None, description="Invoice date") + Estatus: Optional[str] = Field(None, description="Status (AC=Active, etc)") + ClavePed: Optional[str] = Field(None, description="Pedimento code") + TipoMovTemDef: Optional[str] = Field(None, description="Movement type") + EsCambioRegimen: Optional[str] = Field(None, description="Is regime change (S/N)") + Regimen: Optional[str] = Field(None, description="Regime") + Fecha_Inicio: Optional[datetime] = Field(None, description="Start date") + Fecha_Fin: Optional[datetime] = Field(None, description="End date") + Fecha_Pago: Optional[datetime] = Field(None, description="Payment date") + Remesa: Optional[str] = Field(None, description="Remesa") + + # Provider information + Proveedor: Optional[str] = Field(None, description="Provider name") + RFCProveedor: Optional[str] = Field(None, description="Provider RFC") + ProveedorTaxID: Optional[str] = Field(None, description="Provider Tax ID") + + # Buyer information + VendidoA: Optional[str] = Field(None, description="Buyer name") + VendidoARFC: Optional[str] = Field(None, description="Buyer RFC") + VendidoATaxID: Optional[str] = Field(None, description="Buyer Tax ID") + + # Customs broker + AgenteAduanal: Optional[str] = Field(None, description="Customs broker name") + Patente: Optional[str] = Field(None, description="Customs broker patent") + + # Item details + NumParte: Optional[str] = Field(None, description="Part number") + DescripcionE: Optional[str] = Field(None, description="Spanish description") + DescripcionI: Optional[str] = Field(None, description="English description") + CantidadIE: Optional[float] = Field(None, description="Quantity") + UniMed: Optional[str] = Field(None, description="Unit of measure") + ValorComercialMN: Optional[float] = Field(None, description="Commercial value in MN") + TipoCambio: Optional[float] = Field(None, description="Exchange rate") + PesoNeto: Optional[float] = Field(None, description="Net weight") + PesoBruto: Optional[float] = Field(None, description="Gross weight") + + # Additional fields + OrdenCompraVenta: Optional[str] = Field(None, description="Purchase order") + FraccionArancelaria: Optional[str] = Field(None, description="Tariff fraction") + Preferencia: Optional[str] = Field(None, description="Preference") + Sector: Optional[str] = Field(None, description="Sector") + PaisOrigen: Optional[str] = Field(None, description="Country of origin") + Aduana: Optional[str] = Field(None, description="Customs office") + Advalorem: Optional[str] = Field(None, description="Ad valorem") + TipoExpo: Optional[str] = Field(default='', description="Export type") + PedimentoR1: Optional[str] = Field(None, description="Rectification pedimento") + EDocument: Optional[str] = Field(None, description="Electronic document") + NumOperacionVU: Optional[str] = Field(None, description="VU operation number") + + # Series information + Series: Optional[str] = Field(None, description="Serial numbers") + Marca: Optional[str] = Field(None, description="Brand") + Modelo: Optional[str] = Field(None, description="Model") + FraccionAmericana: Optional[str] = Field(None, description="American tariff fraction") + ECCN: Optional[str] = Field(None, description="ECCN code") + SimboloEx: Optional[str] = Field(None, description="Export symbol/license") + FechaEmision: Optional[datetime] = Field(None, description="Emission date") + + # Metadata + BaseDeDatos: Optional[str] = Field(None, description="Source database") + NumGafUni: Optional[str] = Field(None, description="Unique badge number") + UsuarioCap: Optional[str] = Field(None, description="Capture user") + UsuarioAcr: Optional[str] = Field(None, description="Update user") + Transportista: Optional[str] = Field(None, description="Transporter") + NumCaja: Optional[str] = Field(None, description="Box number") + Pedimento18: Optional[str] = Field(None, description="18-digit pedimento") + AduanaCru: Optional[str] = Field(None, description="Crossing customs") + Lote: Optional[str] = Field(None, description="Lot number") + + model_config = { + "json_schema_extra": { + "example": { + "Linea": 1 + } + } + } + + +class ExportFilter(BaseModel): + """Filters for export movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus = 'NA')" + ) + provider: Optional[str] = Field( + None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: ExportMovementType = Field( + default=ExportMovementType.ALL, + description="Filter by export movement type (AFIJO, NODES, SCRAP, REEXP, DONAC, VEMEX)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Filter by discharge status: SiDes, NoDes, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Normal (grouped by invoice) or Detallado (line by line)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type: ME (foreign) or MN (local)" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate type: FP (payment date) or FF (invoice date)" + ) + is_shelter: bool = Field( + default=False, + description="Shelter company flag" + ) + use_transport_method: bool = Field( + default=False, + description="Use transport method for exchange rate logic" + ) + database_name: str = Field( + ..., + description="Legacy database name" + ) + + model_config = { + "json_schema_extra": { + "example": { + "range_type": "FF", + "start_date": "20240101", + "end_date": "20240131", + "include_cancelled": False, + "provider": None, + "buyer": None, + "pedimento_code": None, + "movement_type": "ALL", + "discharge_filter": "ALL", + "report_type": "Normal", + "currency_type": "ME", + "exchange_rate_type": "FP", + "is_shelter": False, + "use_transport_method": False, + "database_name": "MYDB" + } + } + } + +class ExportRepairFilter(BaseModel): + """Filters for export repair movements query (EXPO REP)""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus = 'NA')" + ) + provider: Optional[str] = Field( + None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: ExportMovementType = Field( + default=ExportMovementType.ALL, + description="Filter by movement type (AFIJO, NODES for repair exports)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Filter by discharge status: SiDes, NoDes, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Normal (grouped by invoice) or Detallado (line by line)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type: ME (foreign) or MN (local)" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate type: FP (payment date) or FF (invoice date)" + ) + is_shelter: bool = Field( + default=False, + description="Shelter company flag" + ) + database_name: str = Field( + ..., + description="Legacy database name" + ) + + model_config = { + "json_schema_extra": { + "example": { + "range_type": "FF", + "start_date": "20240101", + "end_date": "20240131", + "include_cancelled": False, + "provider": None, + "buyer": None, + "pedimento_code": None, + "movement_type": "ALL", + "discharge_filter": "ALL", + "report_type": "Normal", + "currency_type": "ME", + "exchange_rate_type": "FP", + "is_shelter": False, + "database_name": "MYDB" + } + } + } \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services.py b/backend/api/v1/modules/a76/reports/movements/invoices/services.py new file mode 100644 index 00000000..f218bd71 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services.py @@ -0,0 +1,112 @@ +""" +Unified service for invoice movement operations. +This service delegates to specialized handlers for each import type. +""" + +import logging +from sqlalchemy.orm import Session +from typing import List + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + MovementItem, + MovementItemDetailed +) +from .services.temporary import TemporaryImportService +from .services.definitive import DefinitiveImportService +from .services.repair import RepairImportService +from .services.export import ExportService + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Unified service for handling all types of movements. + Delegates to specialized services for each movement type. + """ + + def __init__(self): + self.temporary_service = TemporaryImportService() + self.definitive_service = DefinitiveImportService() + self.repair_service = RepairImportService() + self.export_service = ExportService() + + # ===== TEMPORARY IMPORTS ===== + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """Get temporary import movements (normal mode - grouped by invoice).""" + return self.temporary_service.get_movements(db, filters) + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """Get temporary import movements (detailed mode - line by line).""" + return self.temporary_service.get_movements_detailed(db, filters) + + # ===== DEFINITIVE IMPORTS ===== + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """Get definitive import movements (normal mode - grouped by invoice).""" + return self.definitive_service.get_movements(db, filters) + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """Get definitive import movements (detailed mode - line by line).""" + return self.definitive_service.get_movements_detailed(db, filters) + + # ===== REPAIR IMPORTS ===== + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """Get repair import movements (normal mode - grouped by invoice).""" + return self.repair_service.get_movements(db, filters) + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """Get repair import movements (detailed mode - line by line).""" + return self.repair_service.get_movements_detailed(db, filters) + + # ===== EXPORTS ===== + + def get_export_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """Get export movements (normal mode - grouped by invoice).""" + return self.export_service.get_movements(db, filters) + + def get_export_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """Get export movements (detailed mode - line by line).""" + return self.export_service.get_movements_detailed(db, filters) + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py new file mode 100644 index 00000000..fdde7fed --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py @@ -0,0 +1,26 @@ +""" +Invoice Movement Services Module + +This package contains the business logic for handling different types of movements: +- Temporary imports (IMTEM) +- Definitive imports (COMEX/IMPDF) +- Repair imports (IMPRE) +- Exports (EXPO DEF) +- Export repairs (EXPO REP) + +The services are organized into specialized modules for better maintainability. +""" + +from .temporary import TemporaryImportService +from .definitive import DefinitiveImportService +from .repair import RepairImportService +from .export import ExportService +from .export_repair import ExportRepairService + +__all__ = [ + 'TemporaryImportService', + 'DefinitiveImportService', + 'RepairImportService', + 'ExportService', + 'ExportRepairService', +] diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py new file mode 100644 index 00000000..14b62a88 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py @@ -0,0 +1,76 @@ +""" +Base utilities and configuration helpers for invoice movement services. +""" + +import logging +import configparser +from typing import Optional + +logger = logging.getLogger(__name__) + + +class ConfigHelper: + """Helper for reading configuration files.""" + + @staticmethod + def get_met_trans_config() -> int: + """ + Read MetTrans configuration from Scaii.ini file. + + Returns: + MetTrans value (0 or 1) + """ + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + return met_trans + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + return 0 + + +class StringHelper: + """Helper for string manipulation.""" + + @staticmethod + def remove_commas(text: Optional[str]) -> Optional[str]: + """Remove commas from text for CSV compatibility.""" + if not text: + return text + return text.replace(',', '') + + +class DateHelper: + """Helper for date-related operations.""" + + @staticmethod + def get_fecha_tipo_cambio( + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + use_transport_method: bool, + met_trans: int + ): + """ + Determine which date to use for exchange rate lookup based on MetTrans logic. + + Args: + fecha_pago: Payment date + fecha_inicio: Start/entry date + tipo_pedimento: Pedimento type code + use_transport_method: Whether to apply transport method logic + met_trans: MetTrans configuration value + + Returns: + Date to use for exchange rate lookup + """ + fecha = fecha_pago + + # MetTrans# = 1 logic: use fecha_inicio for specific pedimento types + if use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha = fecha_inicio + + return fecha diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py new file mode 100644 index 00000000..cfe08acb --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py @@ -0,0 +1,500 @@ +""" +Database query helpers for invoice movements. +""" + +import logging +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import Optional, Dict + +logger = logging.getLogger(__name__) + + +class DatabaseHelper: + """Helper for common database operations.""" + + @staticmethod + def get_database_name(db: Session) -> Optional[str]: + """ + Get the current database name from the session. + + Returns: + Database name or None if not found + """ + try: + result = db.execute(text("SELECT current_database()")).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error getting database name: {e}") + return None + + @staticmethod + def get_exchange_rate( + db: Session, + db_name: str, + fecha, + is_shelter: bool = False, + raise_on_missing: bool = False, + pedimento_number: Optional[str] = None + ) -> Optional[float]: + """ + Get exchange rate for the given date from exchange_rate table. + + Args: + db: Database session + db_name: Legacy database name (kept for compatibility, not used) + fecha: Date for exchange rate lookup + is_shelter: Shelter company flag (when True and rate not found, raises detailed error) + raise_on_missing: If True, raises ValueError when rate not found + pedimento_number: Pedimento number for error messages + + Returns: + Exchange rate as float, or None if not found + + Raises: + ValueError: When is_shelter=True and exchange rate not found + """ + if not fecha: + return None + + try: + # TODO: Verify exchange_rate table structure and column names + sql_tc = text(""" + SELECT rate + FROM a76.exchange_rate + WHERE rate_date = :fecha + ORDER BY rate_date DESC + LIMIT 1 + """) + res = db.execute(sql_tc, {"fecha": fecha}).fetchone() + if res and res[0]: + return float(res[0]) + else: + # Clarion logic: For Shelter operations with FP, missing exchange rate is an error + if is_shelter and raise_on_missing: + fecha_str = fecha.strftime('%d/%m/%Y') if hasattr(fecha, 'strftime') else str(fecha) + ped_info = f" del Pedimento: {pedimento_number}" if pedimento_number else "" + raise ValueError( + f"El Tipo de Cambio para la Fecha de Pago: {fecha_str}{ped_info} no está capturado. " + f"Solución: Capturar el Tipo de Cambio para la Fecha: {fecha_str}." + ) + logger.warning(f"Exchange rate not found for date {fecha}") + return None + except ValueError: + raise # Re-raise validation errors + except Exception as e: + logger.error(f"Error fetching exchange rate for date {fecha}: {e}") + return None + + @staticmethod + def get_client_info( + db: Session, + db_name: str, + client_code: str, + is_supplier: bool = True + ) -> Dict[str, Optional[str]]: + """ + Get client or supplier information (name, RFC, TaxID). + + Args: + db: Database session + db_name: Database name (kept for compatibility, not used) + client_code: Client/supplier code + is_supplier: True for suppliers, False for clients + + Returns: + Dict with 'name', 'rfc', 'tax_id' keys + """ + if not client_code: + return {"name": None, "rfc": None, "tax_id": None} + + client_type = 'provider' if is_supplier else 'client' + + try: + sql = text(""" + SELECT name, rfc, tax_id + FROM a76.clients_and_providers + WHERE id = :client_code AND client_or_provider = :client_type + """) + result = db.execute(sql, {"client_code": client_code, "client_type": client_type}).fetchone() + + if result: + return { + "name": result[0], + "rfc": result[1], + "tax_id": result[2] + } + else: + logger.debug(f"Client {client_code} not found as {client_type}") + return {"name": None, "rfc": None, "tax_id": None} + except Exception as e: + logger.error(f"Error fetching client info for {client_code}: {e}") + return {"name": None, "rfc": None, "tax_id": None} + + @staticmethod + def get_customs_agent_info( + db: Session, + db_name: str, + agent_code: str + ) -> Dict[str, Optional[str]]: + """ + Get customs agent information (name, license). + + Args: + db: Database session + db_name: Database name (kept for compatibility, not used) + agent_code: Customs agent code + + Returns: + Dict with 'name', 'license' keys + """ + if not agent_code: + return {"name": None, "license": None} + + try: + sql = text(""" + SELECT name, license + FROM a76.customs_brokers + WHERE id = :agent_code + LIMIT 1 + """) + result = db.execute(sql, {"agent_code": agent_code}).fetchone() + + if result: + return { + "name": result[0], + "license": result[1] + } + else: + logger.debug(f"Customs agent {agent_code} not found") + return {"name": None, "license": None} + except Exception as e: + logger.error(f"Error fetching customs agent info for {agent_code}: {e}") + return {"name": None, "license": None} + + @staticmethod + def get_aduana_seccion_nombre( + db: Session, + db_name: str, + aduana_seccion: str + ) -> Optional[str]: + """ + Get customs section name. + + Args: + db: Database session + db_name: Database name + aduana_seccion: Customs section code + + Returns: + Customs section name or None + """ + if not aduana_seccion: + return None + + try: + query = text(""" + SELECT section_name + FROM public.customs_sections + WHERE customs_code = :code + """) + result = db.execute(query, {"code": aduana_seccion}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching customs section name: {e}") + return None + + @staticmethod + def get_series_info( + db: Session, + db_name: str, + consecutivo: str, + linea: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for import items. + + Args: + db: Database session + db_name: Legacy database name + consecutivo: Consecutivo value + linea: LineaImpo value + is_shelter: Shelter flag + + Returns: + Formatted series string or None + """ + if not consecutivo or not linea: + return None + + try: + query = text(""" + SELECT serial_numbers, model, brand + FROM a76.item_line_series ils + INNER JOIN a76.item_lines il ON ils.item_line_id = il.id + INNER JOIN a76.items i ON il.item_id = i.id + WHERE i.consecutivo = :consecutivo + AND il.line_number = :linea + ORDER BY ils.id + LIMIT 1 + """) + result = db.execute(query, { + "consecutivo": consecutivo, + "linea": linea + }).fetchone() + + if result: + serial_numbers, model, brand = result + parts = [] + if serial_numbers: + parts.append(serial_numbers) + if model: + parts.append(model) + if brand: + parts.append(brand) + return " / ".join(parts) if parts else None + return None + except Exception as e: + logger.error(f"Error fetching series info: {e}") + return None + + @staticmethod + def get_series_info_export( + db: Session, + db_name: str, + consecutivo: str, + linea: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for export items. + + Args: + db: Database session + db_name: Legacy database name + consecutivo: Consecutivo value + linea: LineaExpo value + is_shelter: Shelter flag + + Returns: + Formatted series string or None + """ + if not consecutivo or not linea: + return None + + try: + query = text(""" + SELECT serial_numbers, model, expo_brand + FROM a76.item_line_series ils + INNER JOIN a76.item_lines il ON ils.item_line_id = il.id + INNER JOIN a76.items i ON il.item_id = i.id + WHERE i.consecutivo = :consecutivo + AND il.line_number = :linea + ORDER BY ils.id + LIMIT 1 + """) + result = db.execute(query, { + "consecutivo": consecutivo, + "linea": linea + }).fetchone() + + if result: + serial_numbers, model, expo_brand = result + parts = [] + if serial_numbers: + parts.append(serial_numbers) + if model: + parts.append(model) + if expo_brand: + parts.append(expo_brand) + return " / ".join(parts) if parts else None + return None + except Exception as e: + logger.error(f"Error fetching export series info: {e}") + return None + + @staticmethod + def get_rectification_pedimento( + db: Session, + pedimento: str, + ped_rectifica: Optional[str], + is_shelter: bool = False + ) -> Optional[str]: + """ + Get final pedimento rectification number following the chain recursively. + + Clarion logic: + - IF Loc:OpcionShelter = 1 THEN: use direct field value (PedRectifica) + - ELSE: call BuscarRectificacion() - follows rectification chain recursively + + BuscarRectificacion follows the chain: + Example: A1 -> A2 -> A3 -> A4 (returns A4, the final rectification) + + Args: + db: Database session + pedimento: Original pedimento number + ped_rectifica: Initial rectification pedimento from database field + is_shelter: Shelter company flag + + Returns: + Final rectification pedimento number in the chain, or None/empty if no rectification + """ + if is_shelter: + # Shelter: use direct value from PedRectifica field + return ped_rectifica + else: + # Non-Shelter: implement BuscarRectificacion logic + return DatabaseHelper._buscar_rectificacion(db, pedimento, ped_rectifica) + + @staticmethod + def _buscar_rectificacion( + db: Session, + pedimento_orig: str, + ped_rec: Optional[str] + ) -> Optional[str]: + """ + BUSCA ULTIMO PEDIMENTO DE RECTIFICACION + Follows the rectification chain recursively until finding the final pedimento. + + Clarion logic: + - If PPedRec is empty, return '' + - Otherwise, follow the chain using BUSCA_PEDIMENTO_R1 recursively + - Return the last Pedimento2 in the chain if no circular reference + - Return Pedimento1 if error (circular reference detected) + + Args: + db: Database session + pedimento_orig: Original pedimento number + ped_rec: Initial rectification pedimento + + Returns: + Final pedimento in rectification chain or empty string + """ + if not ped_rec: + return '' + + try: + # Track visited pedimentos to detect circular references + visited = set() + visited.add(pedimento_orig) + + # Start recursive search + final_pedimento = DatabaseHelper._busca_pedimento_r1( + db, ped_rec, visited + ) + + # If successful, return final pedimento; otherwise return original rectification + return final_pedimento if final_pedimento else ped_rec + + except Exception as e: + logger.error(f"Error in BuscarRectificacion for {pedimento_orig}: {e}") + return pedimento_orig + + @staticmethod + def _busca_pedimento_r1( + db: Session, + pedimento: str, + visited: set + ) -> Optional[str]: + """ + BUSCA_PEDIMENTO_R1 ROUTINE - Recursive search for final rectification pedimento. + + Clarion logic: + - Fetch pedimento from QPedimentos table + - If it has PedRectifica: + - Check if already visited (circular reference = error) + - Add to visited set and recurse with PedRectifica + - Return the deepest pedimento found + + Args: + db: Database session + pedimento: Current pedimento to check + visited: Set of already visited pedimentos (prevents infinite loops) + + Returns: + Final pedimento in chain, or None if circular reference detected + """ + if pedimento in visited: + # Circular reference detected (ERRORCODE = 30 equivalent) + logger.warning(f"Circular reference detected in rectification chain: {pedimento}") + return None + + try: + # Query pedimentos table for ped_rectifica + sql = text(""" + SELECT ped_rectifica + FROM a76.pedimentos + WHERE pedimento_number = :pedimento + LIMIT 1 + """) + result = db.execute(sql, {"pedimento": pedimento}).fetchone() + + if result and result[0]: + ped_rectifica_next = result[0] + + # Add current pedimento to visited set + visited.add(pedimento) + + # Recurse with next rectification + final_ped = DatabaseHelper._busca_pedimento_r1( + db, ped_rectifica_next, visited + ) + + # If recursion failed (circular ref), return None + # Otherwise return the final pedimento found + return final_ped if final_ped else pedimento + else: + # No more rectifications, this is the final pedimento + return pedimento + + except Exception as e: + logger.error(f"Error fetching rectification for pedimento {pedimento}: {e}") + return None + + @staticmethod + def get_driver_badge( + db: Session, + db_name: str, + factura: str + ) -> Optional[str]: + """ + Get driver unique badge number (NUMGAFETEUNICO) for invoice. + + Clarion query: + SELECT NUMGAFETEUNICO FROM GConductor + LEFT JOIN QFacImp ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = '' + + Modern schema: + - invoice_header has invoice_number + - invoice_logistics links to invoice via invoice_id and has driver_name + - driver table has unique_badge_number and driver_name + + Args: + db: Database session + db_name: Database name (not used in modern schema) + factura: Invoice number + + Returns: + Driver unique badge number or None + """ + if not factura: + return None + + try: + # Join invoice_header -> invoice_logistics -> driver via driver_name + query = text(""" + SELECT d.unique_badge_number + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.driver d ON d.driver_name = log.driver_name + WHERE ih.invoice_number = :factura + AND d.unique_badge_number IS NOT NULL + LIMIT 1 + """) + result = db.execute(query, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching driver badge for invoice {factura}: {e}") + return None diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py new file mode 100644 index 00000000..5a2c1ee3 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -0,0 +1,372 @@ +""" +Definitive import service - handles COMEX/IMPDF movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportDefinitiveFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import DefinitiveImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class DefinitiveImportService: + """Service for handling definitive import movements (COMEX/IMPDF).""" + + def get_movements( + self, + db: Session, + filters: "ImportDefinitiveFilter" + ) -> List["MovementItem"]: + """ + Get definitive import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching definitive import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(DefinitiveImportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} definitive import invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaImpoDef + estatus = row[3] # C4 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + invoice_id = row[16] # C35 - invoice ID + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = row[28] # total_me from SUM aggregation + total_mn = row[29] # total_mn from SUM aggregation + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[20], # C51 - TipoCambio + fecha_pago=row[8], # C13 - Fecha_Pago + fecha_inicio=row[6], # C11 - Fecha_Inicio + tipo_pedimento=row[27], # C59 - TIPOPEDIMENTOTRANSPORTEE + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpoDef + row[17], # C42 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoImpoDef + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMPDF', + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C43 - EDocument + NumOperacionVU=row[19], # C44 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C53 - UsuarioCap + UsuarioAcr=row[23], # C54 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[8]), # C13 - Fecha_Pago + NumCaja=row[24], # C56 - Transporte + NumTrasporte + tipo_pedimento=row[25], # C57 - Pedimento18 + AduanaCru=row[15], # C39 - Aduana_Cruce + Lote=row[26] # C58 - LOTE + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching definitive import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportDefinitiveFilter" + ) -> List["MovementItemDetailed"]: + """ + Get definitive import movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed definitive import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute main query + sql = text(DefinitiveImportQueries.build_main_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed definitive import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + continue + + # Get all detailed information (same as temporary imports) + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[17] + ) + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[38] + ) + + # Calculate values using unified method + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # EsSubPartida + valor_me=row[26], + valor_mn_direct=row[24], + fecha_pago=row[12], + fecha_inicio=row[10], + clave_ped=row[58], + tipo_cambio_partida=row[50], + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + if row[39] == 'P': + peso_neto = float(row[28]) if row[28] else 0.0 + peso_bruto = float(row[29]) if row[29] else 0.0 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[40], row[44], filters.is_shelter + ) + + simbolo_ex = None + if row[49]: + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[49], filters.is_shelter + ) + + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, row[1], row[41], filters.is_shelter + ) + + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[0] + ) + + movement = MovementItemDetailed( + Linea=row[44], + Factura=row[0], + Pedimento=row[1], + FechaFactura=row[2], + Estatus=row[3], + ClavePed=row[4], + TipoMovTemDef='IMPDF', + EsCambioRegimen='N', + Regimen=row[9], + Fecha_Inicio=row[10], + Fecha_Fin=row[11], + Fecha_Pago=row[12], + Remesa=row[13], + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[19], + DescripcionE=StringHelper.clean_text(row[20]), + DescripcionI=StringHelper.clean_text(row[21]), + CantidadIE=float(row[22]) if row[22] else 0.0, + UniMed=row[23], + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[30], + FraccionArancelaria=row[31], + Preferencia=row[32], + Sector=row[34], + PaisOrigen=row[37], + Aduana=aduana_nombre, + Advalorem=row[39], + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[42], + NumOperacionVU=row[43], + Series=series_info, + Marca=StringHelper.clean_text(row[45]), + Modelo=StringHelper.clean_text(row[46]), + FraccionAmericana=row[47], + ECCN=row[48], + SimboloEx=simbolo_ex, + FechaEmision=row[51], + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[52], + UsuarioAcr=row[53], + Transportista=row[54], + NumCaja=row[55], + Pedimento18=row[56], + AduanaCru=row[38], + Lote=row[57] + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed definitive import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportDefinitiveFilter") -> str: + """Build WHERE clause for definitive imports query.""" + where_conditions = [] + + # STRICT SEPARATION: Only imports + where_conditions.append("ih.operation_type = 'imp'") + + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + if hasattr(filters, 'movement_type') and filters.movement_type == 'ALL': + # ALL mode: bring all imports without filtering by specific invoice_type + pass + else: + # Specific mode: Filter by definitive invoice types only + where_conditions.append("ih.invoice_type IN ('DEF', 'MATDE', 'EXDEF')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id = {filters.provider}") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """Calculate totals for main partidas only. + + Only sums partidas where is_subpartida is false (equivalent to EsSubpartida = 'P' in Clarion). + """ + sql = text(""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + AND COALESCE(il.is_subpartida, false) = false + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py new file mode 100644 index 00000000..656c8869 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py @@ -0,0 +1,172 @@ +""" +Exchange rate calculation logic for invoice movements. +""" + +import logging +from sqlalchemy.orm import Session +from typing import Tuple, Optional +from .base import DateHelper +from .database_helpers import DatabaseHelper + +logger = logging.getLogger(__name__) + + +class ExchangeRateCalculator: + """Handles exchange rate calculations and commercial value conversions.""" + + @staticmethod + def calculate_exchange_rate_and_value( + db: Session, + db_name: str, + es_subpartida: str, + valor_me: Optional[float], + valor_mn_direct: Optional[float], + fecha_pago, + fecha_inicio, + clave_ped: str, + tipo_cambio_partida: Optional[float], + currency_type: str, + exchange_rate_type: str, + met_trans: int + ) -> Tuple[float, Optional[float]]: + """ + Unified method to calculate exchange rate and commercial value. + Eliminates duplicated logic across all import types. + + Args: + db: Database session + db_name: Database name + es_subpartida: Subpartida flag ('P' for partida, 'S' for subpartida) + valor_me: Value in foreign currency (ME) + valor_mn_direct: Direct value in local currency (MN) + fecha_pago: Payment date + fecha_inicio: Start/entry date + clave_ped: Pedimento type code + tipo_cambio_partida: Exchange rate from partida record + currency_type: "ME" or "MN" + exchange_rate_type: "FP" (payment date) or "FT" (transaction date) + met_trans: MetTrans configuration value + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio_final) + """ + # Handle subpartidas - always return zero + if es_subpartida == 'S': + return (0.0, None) + + # Handle foreign currency (ME) case + if currency_type == "ME": + valor_comercial = valor_me or 0.0 + tipo_cambio_final = tipo_cambio_partida + + # Try to get exchange rate from GTipoCambio if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=clave_ped, + use_transport_method=True, # Always use for detailed calculations + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) + if tc_value: + tipo_cambio_final = tc_value + + return (valor_comercial, tipo_cambio_final) + + # Handle local currency (MN) case + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=clave_ped, + use_transport_method=True, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) + + if tc_value and valor_me is not None: + # Calculate MN value from ME * exchange rate + return (valor_me * tc_value, tc_value) + else: + # Fall back to direct MN value and partida exchange rate + if tc_value is None: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using partida values") + return (valor_mn_direct or 0.0, tipo_cambio_partida) + else: + # Use direct MN value and partida exchange rate + return (valor_mn_direct or 0.0, tipo_cambio_partida) + + @staticmethod + def calculate_for_aggregated( + db: Session, + db_name: str, + valor_me: float, + valor_mn: float, + tipo_cambio_db: float, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + currency_type: str, + exchange_rate_type: str, + is_shelter: bool, + use_transport_method: bool, + met_trans: int + ) -> Tuple[float, Optional[float]]: + """ + Calculate exchange rate and value for aggregated (normal mode) movements. + + This method is used when movements are grouped by invoice rather than + showing individual partidas. + + Args: + db: Database session + db_name: Database name + valor_me: Aggregated value in foreign currency + valor_mn: Aggregated value in local currency + tipo_cambio_db: Exchange rate from database + fecha_pago: Payment date + fecha_inicio: Start date + tipo_pedimento: Pedimento type + currency_type: "ME" or "MN" + exchange_rate_type: "FP" or "FT" + is_shelter: Shelter company flag (kept for compatibility) + use_transport_method: Use transport method flag + met_trans: MetTrans value from config + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio) + """ + # Foreign currency case + if currency_type == "ME": + valor_comercial = valor_me + tipo_cambio = tipo_cambio_db + + # Try to get exchange rate if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + use_transport_method=use_transport_method, + met_trans=met_trans + ) + # For Shelter + FP: validate exchange rate exists (Clarion logic) + tc_value = DatabaseHelper.get_exchange_rate( + db, db_name, fecha_tc, + is_shelter=is_shelter, + raise_on_missing=is_shelter # Raise error if shelter and not found + ) + + if tc_value: + return (valor_me * tc_value, tc_value) + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + return (valor_mn, tipo_cambio_db) + else: + # FT or no payment date: use DB values + return (valor_comercial, tipo_cambio) + + # Local currency case + else: + return (valor_mn, tipo_cambio_db) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py new file mode 100644 index 00000000..cfb594f7 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -0,0 +1,435 @@ +""" +Export service - handles export movements (EXPO DEF). +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional + +from ..schemas import ExportFilter, MovementItem, MovementItemDetailed +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import ExportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class ExportService: + """Service for handling export movements (EXPO DEF).""" + + def get_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """ + Get export movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + try: + logger.info(f"Fetching export movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + # Note: discharge_clause not used in aggregated query for exports + sql = text(ExportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} export invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaExpo + tipo_mov = row[15] # C34 - TipoFactura + + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C6 - Estatus + continue + + consecutivo = row[16] # C35 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = row[24] # total_me from SUM aggregation + total_mn = row[25] # total_mn from SUM aggregation + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[19], # C48 - TipoCambio + fecha_pago=row[8], # C11 - Fecha_Pago + fecha_inicio=row[6], # C9 - Fecha_Inicio + tipo_pedimento='', # Not in aggregated query + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=filters.use_transport_method, + met_trans=met_trans + ) + + # Get pedimento rectification + rectified_pedimento = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + '', # PedRectifica not in aggregated query + filters.is_shelter + ) + + # Get driver badge + driver_badge = self._get_driver_badge(db, filters.database_name, factura) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C6 - Estatus + ClavePed=row[4], # C7 - ClavePed + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='EXPO DEF', + PedimentoR1=rectified_pedimento, + EDocument=row[17], # C40 - EDocument + NumOperacionVU=row[18], # C41 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=driver_badge, + UsuarioCap=row[21], # C50 - UsuarioCap + UsuarioAcr=row[22], # C51 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[8]), # C11 - Fecha_Pago + NumCaja=row[23], # C53 - Transporte + NumTrasporte + Pedimento18='', # Not in aggregated query + AduanaCru=row[14], # C33 - Aduana_Cruce + Lote='' # Not in aggregated query + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} export movements") + return movements + + except Exception as e: + logger.error(f"Error fetching export movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """ + Get export movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + try: + logger.info(f"Fetching detailed export movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Build discharge filter for main query + discharge_clause = "" + if filters.discharge_filter == "SiDes": + discharge_clause = " AND EqiPex.Descarga = 1" + elif filters.discharge_filter == "NoDes": + discharge_clause = " AND EqiPex.Descarga = 0" + + # Modify main query to include discharge filter + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(ExportQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed export partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus + continue + + # Get client/supplier information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[15] # C16 - AAduanal + ) + + # Get customs section name + customs_name = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[32] # C33 - Aduana_Cruce + ) + + # Calculate exchange rate and value for this partida + valor_mn, tipo_cambio_final = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[37], # C38 - EsSubPartida + valor_me=row[36], # C37 - ValorExpoME + valor_mn_direct=row[35], # C36 - ValorExpoMN + fecha_pago=row[10], # C11 - Fecha_Pago + fecha_inicio=row[8], # C9 - Fecha_Inicio + clave_ped=row[55], # C56 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[47], # C48 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + peso_neto_final = row[24] if row[37] == 'P' else 0 # C25 - PesoNeto + peso_bruto_final = row[25] if row[37] == 'P' else 0 # C26 - PesoBruto + + # Get series information + series_info = self._get_series_info( + db, filters.database_name, row[34], row[41] # C35 - Consecutivo, C42 - LineaExpo + ) + + # Get pedimento rectification + rectified_pedimento = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[38], # C39 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + driver_badge = self._get_driver_badge(db, filters.database_name, row[0]) # C1 - FacturaExpo + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[41], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[6], # C7 - ClavePed + TipoMovTemDef=row[33], # C34 - TipoFactura + EsCambioRegimen='N', + Regimen=row[7], # C8 - Regimen + Fecha_Inicio=row[8], # C9 - Fecha_Inicio + Fecha_Fin=row[9], # C10 - Fecha_Fin + Fecha_Pago=row[10], # C11 - Fecha_Pago + Remesa=row[11], # C12 - Remesa + TipoCambio=tipo_cambio_final, + Proveedor=proveedor_info.get("name"), + RFCProveedor=proveedor_info.get("rfc"), + ProveedorTaxID=proveedor_info.get("tax_id"), + VendidoA=vendido_info.get("name"), + VendidoARFC=vendido_info.get("rfc"), + VendidoATaxID=vendido_info.get("tax_id"), + AgenteAduanal=agente_info.get("name"), + Patente=agente_info.get("license"), + NumParte=row[17], # C18 - Clase + DescripcionE=StringHelper.remove_commas(row[18]), # C19 - DescripcionE + DescripcionI=StringHelper.remove_commas(row[19]), # C20 - DescripcionI + CantidadIE=row[20], # C21 - CantExpo + UniMed=row[21], # C22 - UnidadMedida + ValorComercialMN=valor_mn, + PesoNeto=peso_neto_final, + PesoBruto=peso_bruto_final, + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen + Aduana=customs_name, + Advalorem=row[37], # C38 - EsSubPartida + TipoExpo='EXPO DEF', + PedimentoR1=rectified_pedimento, + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU + Series=series_info, + Marca=row[42], # C43 - Marca + Modelo=row[43], # C44 - Modelo + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN + FechaEmision=row[48], # C49 - FechaEmision + BaseDeDatos=filters.database_name, + NumGafUni=driver_badge, + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Transportista + NumCaja=row[52], # C53 - Transporte + NumTrasporte + Pedimento18=row[53], # C54 - Pedimento18 + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] # C55 - Lote + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed export movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed export movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: ExportFilter) -> str: + """ + Build WHERE clause for export query. + + IMPORTANT: Returns conditions WITHOUT the WHERE keyword (already in base query) + AC (Active) = is_updated = true + NA (Not Applicable/Deactivated) = is_updated = false + """ + conditions = [] + + # STRICT SEPARATION: Only exports + conditions.append("ih.operation_type = 'exp'") + + # Exclude REP (export reports) + conditions.append("ih.invoice_type NOT IN ('REP')") + + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + if filters.movement_type.value != "ALL": + # Filter by invoice type for exports + conditions.append("ih.invoice_type IN ('EXP', 'EXREP')") + + # CRITICAL VALIDATION: AC/NA status filter + # If include_cancelled is False (checkbox unchecked), only show AC invoices + # AC (Active) = is_updated = true + # NA (Not Applicable/Deactivated) = is_updated = false + if not filters.include_cancelled: + conditions.append("ih.is_updated = true") + logger.debug("Filtering only active invoices (is_updated = true)") + else: + logger.debug("Including cancelled invoices (include_cancelled = true)") + + # Date range + date_field = "ih.invoice_date" if filters.range_type.value == "FF" else "log.payment_date" + conditions.append(f"{date_field} >= TO_DATE('{filters.start_date}', 'YYYYMMDD')") + conditions.append(f"{date_field} <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Optional filters + if filters.provider: + conditions.append(f"cmp.provider_id = {filters.provider}") + if filters.buyer: + conditions.append(f"cmp.sold_to_id = {filters.buyer}") + if filters.pedimento_code: + conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(conditions) + + def _build_discharge_clause(self, discharge_filter: str) -> str: + """Build discharge filter clause for totals query.""" + if discharge_filter == "SiDes": + return " AND il.is_discharged = true" + elif discharge_filter == "NoDes": + return " AND il.is_discharged = false" + return "" + + def _calculate_totals( + self, + db: Session, + db_name: str, + consecutivo: int, + discharge_clause: str + ) -> tuple: + """Calculate total values for an export invoice.""" + try: + sql = text(ExportQueries.build_totals_query(db_name, discharge_clause)) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating export totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_series_info( + self, + db: Session, + db_name: str, + consecutivo: int, + linea: int + ) -> str: + """Get series information for export partida.""" + if not consecutivo or not linea: + return None + + try: + sql = text(ExportQueries.build_series_query(db_name)) + results = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() + + if not results: + return None + + series_list = [] + for idx, row in enumerate(results, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_list.append(serie_str) + + return " | ".join(series_list) if series_list else None + + except Exception as e: + logger.debug(f"Error fetching export series info for consecutivo {consecutivo}, linea {linea}: {e}") + return None + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: + """Get driver's unique badge number for an export invoice.""" + if not factura: + return None + + try: + sql = text(ExportQueries.build_driver_badge_query(db_name)) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for export invoice {factura}: {e}") + return None diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py new file mode 100644 index 00000000..51044161 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -0,0 +1,400 @@ +""" +Export repair service - handles EXPO REP movements (repair exports). +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional + +from ..schemas import ExportRepairFilter, MovementItem, MovementItemDetailed +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import ExportRepairQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class ExportRepairService: + """Service for handling export repair movements (EXPO REP).""" + + def get_movements( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItem]: + """ + Get export repair movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + try: + logger.info(f"Fetching export repair movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(ExportRepairQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} export repair invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaExpo + tipo_mov = row[14] # C34 - TipoFactura + estatus = row[3] # C6 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[15] # C35 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = row[24] # total_me from SUM aggregation + total_mn = row[25] # total_mn from SUM aggregation + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[18], # C48 - TipoCambio + fecha_pago=row[6], # C11 - Fecha_Pago + fecha_inicio='', # Not in aggregated query + tipo_pedimento='', # Not in aggregated query + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + '', # PedRectifica not in aggregated query + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C6 - Estatus + ClavePed=row[4], # C7 - ClavePed + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='EXPO REP', + PedimentoR1=pedimento_r1, + EDocument=row[16], # C40 - EDocument + NumOperacionVU=row[17], # C41 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[20], # C50 - UsuarioCap + UsuarioAcr=row[21], # C51 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[6]), # C11 - Fecha_Pago + NumCaja=row[23], # C53 - Transporte + NumTrasporte + Pedimento18='', # Not in aggregated query + AduanaCru=row[13], # C33 - customs_office + Lote='' # Not in aggregated query + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} export repair movements") + return movements + + except Exception as e: + logger.error(f"Error fetching export repair movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItemDetailed]: + """ + Get export repair movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + try: + logger.info(f"Fetching detailed export repair movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Add discharge filter to WHERE clause + discharge_clause = "" + if filters.discharge_filter.value == "SiDes": + discharge_clause = " AND RepPex.Descarga = 1" + elif filters.discharge_filter.value == "NoDes": + discharge_clause = " AND RepPex.Descarga = 0" + + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(ExportRepairQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed export repair partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus + continue + + # Get provider information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + + # Get buyer information + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[15] # C16 - AAduanal + ) + + # Get customs section name + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[32] # C33 - Aduana_Cruce + ) + + # Calculate values (only for main partidas 'P') + if row[37] == 'P': # C38 - EsSubPartida + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_partida( + db=db, + db_name=filters.database_name, + valor_me=row[36], # C37 - ValorExpoME + valor_mn=row[35], # C36 - ValorExpoMN + tipo_cambio_db=row[47], # C48 - TipoCambio + fecha_pago=row[10], # C11 - Fecha_Pago + fecha_inicio=row[8], # C9 - Fecha_Inicio + tipo_pedimento=row[55], # C56 - TIPOPEDIMENTOTRANSPORTEE + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + peso_neto = float(row[24]) if row[24] else 0.0 # C25 + peso_bruto = float(row[25]) if row[25] else 0.0 # C26 + else: # Subpartida + valor_comercial = 0.0 + tipo_cambio = 0.0 + peso_neto = 0.0 + peso_bruto = 0.0 + + # Get series information + series_info = DatabaseHelper.get_series_info_export( + db, filters.database_name, row[34], row[41], filters.is_shelter # C35, C42 + ) + + # Get part export symbol + simbolo_ex = None + if row[46]: # C47 - NumParte + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[46], filters.is_shelter + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[38], # C39 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, row[0]) + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[41], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[6], # C7 - ClavePed + TipoMovTemDef=row[33], # C34 - TipoFactura + EsCambioRegimen='N', + Regimen=row[7], # C8 - Regimen + Fecha_Inicio=row[8], # C9 - Fecha_Inicio + Fecha_Fin=row[9], # C10 - Fecha_Fin + Fecha_Pago=row[10], # C11 - Fecha_Pago + Remesa=row[11], # C12 - Remesa + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[17], # C18 - Clase (NumParte) + DescripcionE=StringHelper.clean_text(row[18]), # C19 + DescripcionI=StringHelper.clean_text(row[19]), # C20 + CantidadIE=float(row[20]) if row[20] else 0.0, # C21 + UniMed=row[21], # C22 + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen + Aduana=aduana_nombre, + Advalorem=row[37], # C38 - EsSubPartida + TipoExpo='EXPO REP', + PedimentoR1=pedimento_r1, + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU + Series=series_info, + Marca=StringHelper.clean_text(row[42]), # C43 + Modelo=StringHelper.clean_text(row[43]), # C44 + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN + SimboloEx=simbolo_ex, + FechaEmision=row[48], # C49 - FechaFactura + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Transportista + NumCaja=row[52], # C53 - Transporte + NumTrasporte + Pedimento18=row[53], # C54 - Pedimento18 + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] # C55 - Lote + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed export repair movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed export repair movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: ExportRepairFilter) -> str: + """Build WHERE clause for export repair query.""" + where_conditions = [] + + # STRICT SEPARATION: Only exports for repair + where_conditions.append("ih.operation_type = 'exp'") + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + if filters.movement_type.value == "ALL": + # ALL mode: bring all exports without filtering by specific invoice_type + pass + else: + where_conditions.append("ih.invoice_type IN ('EXREP', 'MATEXREP')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id = {filters.provider}") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "AFIJO": + where_conditions.append("ih.document_type = 'AFIJO'") + elif filters.movement_type.value == "NODES": + where_conditions.append("ih.document_type = 'NODES'") + + return " AND ".join(where_conditions) + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int, discharge_filter: str) -> tuple: + """Calculate totals for main partidas with discharge filter.""" + discharge_clause = "" + if discharge_filter == "SiDes": + discharge_clause = " AND il.is_discharged = true" + elif discharge_filter == "NoDes": + discharge_clause = " AND il.is_discharged = false" + + sql = text(f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + AND il.is_subpart = false + {discharge_clause} + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: + """Get driver badge number for invoice.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return None diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py new file mode 100644 index 00000000..d141392c --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -0,0 +1,877 @@ +""" +SQL Query builders for invoice movement services. +Centralizes all SQL query construction logic. +""" + + +class TemporaryImportQueries: + """SQL queries for temporary imports using PostgreSQL tables.""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: db_name parameter kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(ped_r1.pedimento_number, '') AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, cmp.remesa, fin.exchange_rate, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, cmp.aduana, ped_r1.pedimento_number, + cmp.edocument, cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num, log.license_plate + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL.""" + # Note: db_name parameter is kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(cmp.provider_id::text, '') AS C8, + COALESCE(cmp.sold_to_id::text, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(il.unit_of_measure::text, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(lc.sector, '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + FALSE AS C40, + '' AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(il.line_number, 0) AS C44, + '' AS C45, + '' AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, '') AS C48, + COALESCE(il.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.item_lines il ON il.item_id = ( + SELECT id FROM a76.items WHERE invoice_id = ih.id LIMIT 1 + ) + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for an invoice.""" + return f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information.""" + return f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number.""" + return f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """ + + +class DefinitiveImportQueries: + """SQL queries for definitive imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(cmp.aduana, '') AS C39, + ih.id AS C35, + COALESCE(ped_r1.pedimento_number, '') AS C42, + COALESCE(cmp.edocument, '') AS C43, + COALESCE(cmp.vucem_operation_num, '') AS C44, + COALESCE(fin.exchange_rate, 0) AS C51, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C52, + COALESCE(ih.capture_user, '') AS C53, + COALESCE(ih.who_updated, '') AS C54, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, + '' AS C57, + '' AS C58, + '' AS C59, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') + AND {where_clause} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, + ih.purchase_order, cmp.aduana, ped_r1.pedimento_number, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + ped.status AS C4, -- [3] + ped.pedimento_code AS C5, -- [4] + '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] + ped.regime AS C10, -- [9] + log.entry_exit_date AS C11, -- [10] + log.delivery_date AS C12, -- [11] + log.payment_date AS C13, -- [12] + log.payment_receipt_num AS C14, -- [13] + '' AS C15, -- [14] + cmp.provider_id AS C16, -- [15] + cmp.sold_to_id AS C17, -- [16] + cmp.customs_broker_id AS C18, -- [17] + '' AS C19, -- [18] + prt.part_number AS C20, -- [19] + ld.description_spanish AS C21, -- [20] + ld.description_english AS C22, -- [21] + lq.quantity AS C23, -- [22] + um.code AS C24, -- [23] + lf.value_mxn AS C25, -- [24] + '' AS C26, -- [25] + lf.value_usd AS C27, -- [26] + '' AS C28, -- [27] + lq.net_weight AS C29, -- [28] + lq.gross_weight AS C30, -- [29] + ih.purchase_order AS C31, -- [30] + lc.fraction AS C32, -- [31] + '' AS C33, '' AS C34, -- [32-33] + ih.id AS C35, -- [34] + '' AS C36, '' AS C37, -- [35-36] + lc.origin_country AS C38, -- [37] + cmp.aduana AS C39, -- [38] + il.material_type AS C40, -- [39] + il.id AS C41, -- [40] + '' AS C42, -- [41] rectification_id + cmp.edocument AS C43, -- [42] + cmp.vucem_operation_num AS C44, -- [43] + il.line_number AS C45, -- [44] + ld.brand AS C46, -- [45] + ld.model AS C47, -- [46] + prt.us_fraction AS C48, -- [47] + prt.eccn AS C49, -- [48] + prt.id AS C50, -- [49] + fin.exchange_rate AS C51, -- [50] + ih.emission_date AS C52, -- [51] + ih.capture_user AS C53, -- [52] + ih.who_updated AS C54, -- [53] + '' AS C55, -- [54] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, -- [55] + '' AS C57, -- [56] Pedimento18 (row[56]) + COALESCE(ld.lot, '') AS C58, -- [57] Lote (row[57]) + '' AS C59, -- [58] TipoPed (row[58]) + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for a definitive import invoice.""" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for definitive imports.""" + # TODO: QSeriesDef table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for definitive imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class RepairImportQueries: + """SQL queries for repair imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + ih.invoice_number AS C2, + COALESCE(ped.pedimento_number, '') AS C3, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C4, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C5, + COALESCE(ped.pedimento_code, '') AS C6, + COALESCE(ped.regime, '') AS C7, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C9, + COALESCE(cmp.remesa::text, '') AS C10, + COALESCE(fin.exchange_rate, 0) AS C11, + COALESCE(cmp.provider_id::text, '') AS C12, + COALESCE(cmp.sold_to_id::text, '') AS C13, + COALESCE(cmp.customs_broker_id::text, '') AS C14, + COALESCE(ih.purchase_order, '') AS C24, + COALESCE(ped.customs_office, '') AS C29, + ih.id AS C30, + COALESCE(cmp.edocument, '') AS C33, + COALESCE(cmp.vucem_operation_num, '') AS C34, + COALESCE(fin.exchange_rate, 0) AS C40, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C41, + COALESCE(ih.capture_user, '') AS C42, + COALESCE(ih.who_updated, '') AS C43, + COALESCE(log.carrier_id, '') AS C44, + COALESCE(log.transport_num, '') AS C45, + COALESCE(ped.pedimento_code, '') AS C47, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build main SQL query for repair import data.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + il.line_number, + ih.invoice_number, + COALESCE(ped.pedimento_number, ''), + TO_CHAR(ih.invoice_date, 'YYYYMMDD'), + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END, + COALESCE(ped.pedimento_code, ''), + COALESCE(ped.regime, ''), + '', + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), + COALESCE(cmp.remesa::text, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(cmp.provider_id::text, ''), + COALESCE(cmp.sold_to_id::text, ''), + COALESCE(cmp.customs_broker_id::text, ''), + COALESCE(il.part_number::text, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lq.quantity, 0), + COALESCE(il.unit_of_measure, 0), + COALESCE(lf.value_mxn, 0), + COALESCE(lf.value_usd, 0), + COALESCE(lq.net_weight, 0), + COALESCE(lq.gross_weight, 0), + COALESCE(ih.purchase_order, ''), + COALESCE(lc.fraction, ''), + '', + COALESCE(lc.sector, ''), + COALESCE(lc.origin_country, ''), + COALESCE(ped.customs_office, ''), + ih.id, + 'P', + '', + COALESCE(cmp.edocument, ''), + COALESCE(cmp.vucem_operation_num, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lc.american_fraction, ''), + COALESCE(prt.eccn, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), ''), + COALESCE(ih.capture_user, ''), + COALESCE(ih.who_updated, ''), + COALESCE(log.carrier_id, ''), + COALESCE(log.transport_num, ''), + '', + COALESCE(ped.pedimento_code, '') + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for a repair import invoice.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for repair imports.""" + # TODO: QSeriesImpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for repair imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportQueries: + """SQL queries for exports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """ + Build optimized query for NORMAL mode (grouped by invoice with totals). + + Args: + db_name: Database name (not used in PostgreSQL version) + where_clause: Additional WHERE conditions (without WHERE keyword) + """ + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(log.payment_receipt_num, '') AS C12, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(cmp.aduana, '') AS C33, + COALESCE(ih.invoice_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE {where_clause} + GROUP BY ih.id, ih.invoice_number, ih.is_updated, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, ih.purchase_order, cmp.aduana, + ih.invoice_type, cmp.edocument, cmp.vucem_operation_num, fin.exchange_rate, + ih.emission_date, ih.capture_user, ih.who_updated, log.transport_id, log.transport_num, + ih.invoice_date + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + '' AS C4, -- [3] + '' AS C5, -- [4] + ped.status AS C6, -- [5] + ped.pedimento_code AS C7, -- [6] + ped.regime AS C8, -- [7] + log.entry_exit_date AS C9, -- [8] + log.delivery_date AS C10, -- [9] + log.payment_date AS C11, -- [10] + log.payment_receipt_num AS C12, -- [11] + '' AS C13, -- [12] + cmp.provider_id AS C14, -- [13] + cmp.sold_to_id AS C15, -- [14] + cmp.customs_broker_id AS C16, -- [15] + '' AS C17, -- [16] + prt.part_number AS C18, -- [17] + ld.description_spanish AS C19, -- [18] + ld.description_english AS C20, -- [19] + lq.quantity AS C21, -- [20] + um.code AS C22, -- [21] + '' AS C23, -- [22] + '' AS C24, -- [23] + lq.net_weight AS C25, -- [24] + lq.gross_weight AS C26, -- [25] + ih.purchase_order AS C27, -- [26] + lc.fraction AS C28, -- [27] + '' AS C29, -- [28] + '' AS C30, -- [29] + '' AS C31, -- [30] + '' AS C32, -- [31] + cmp.aduana AS C33, -- [32] + ih.invoice_type AS C34, -- [33] + ih.id AS C35, -- [34] + lf.value_mxn AS C36, -- [35] + lf.value_usd AS C37, -- [36] + il.material_type AS C38, -- [37] + '' AS C39, -- [38] rectification_id + cmp.edocument AS C40, -- [39] + cmp.vucem_operation_num AS C41, -- [40] + il.line_number AS C42, -- [41] + ld.brand AS C43, -- [42] + ld.model AS C44, -- [43] + prt.us_fraction AS C45, -- [44] + prt.eccn AS C46, -- [45] + prt.id AS C47, -- [46] + fin.exchange_rate AS C48, -- [47] + ih.emission_date AS C49, -- [48] + ih.capture_user AS C50, -- [49] + ih.who_updated AS C51, -- [50] + '' AS C52, -- [51] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, -- [52] NumCaja + '' AS C54, -- [53] Pedimento18 + COALESCE(ld.lot, '') AS C55, -- [54] Lote + '' AS C56, -- [55] TipoPedimentoTransporte + '' AS C57, -- [56] + '' AS C58, -- [57] + '' AS C59, -- [58] + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export invoice. + + Only sums partidas where is_subitem is false (main partidas, not sub-items). + """ + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON il.id = lf.item_line_id + WHERE itm.invoice_id = :consecutivo + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for exports.""" + # TODO: QSeriesExpo table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for exports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportRepairQueries: + """SQL queries for export repairs (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: discharge_clause temporarily disabled until is_discharged field migrated + discharge_filter = "" # Will be: " AND il.is_discharged = true/false" when ready + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'exp' + AND ih.invoice_type = 'REP' + {"AND " + where_str if where_str else ""} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, ih.document_type, + cmp.edocument, cmp.vucem_operation_num, ih.invoice_date, ih.capture_user, + ih.who_updated, log.carrier_id, log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for export repair data.""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + COALESCE(fin.value_me, 0) AS C4, + COALESCE(fin.value_mn, 0) AS C5, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + '' AS C9, + '' AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + '' AS C17, + COALESCE(cls.class_code, '') AS C18, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(cls.description_en, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, + COALESCE(lq.quantity, 0) AS C21, + COALESCE(il.unit_of_measure, 0) AS C22, + COALESCE(lf.customs_value_mxn, 0) AS C23, + COALESCE(lf.customs_value_usd, 0) AS C24, + COALESCE(lq.net_weight, 0) AS C25, + COALESCE(lq.gross_weight, 0) AS C26, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(lc.fraction, '') AS C28, + COALESCE(lc.fraction_type, '') AS C29, + COALESCE(lc.advalorem_numeric, 0) AS C30, + COALESCE(lc.sector, '') AS C31, + COALESCE(lc.origin_country, '') AS C32, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(lf.value_mxn, 0) AS C36, + COALESCE(lf.value_usd, 0) AS C37, + 'P' AS C38, + '' AS C39, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(il.line_number, 0) AS C42, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, + COALESCE(cls.us_fraction, '') AS C45, + COALESCE(prt.eccn, '') AS C46, + COALESCE(il.part_number::text, '') AS C47, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + '' AS C54, + COALESCE(ld.lot, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + '' AS C59 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') + AND UPPER(ih.invoice_type) IN ('DEF', 'REP', 'EXDEF', 'MATDE') + AND {where_str} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export repair invoice.""" + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON il.id = lf.item_line_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for export repairs.""" + # TODO: QSeriesExpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for export repairs.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak new file mode 100644 index 00000000..f74e0da8 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak @@ -0,0 +1,877 @@ +""" +SQL Query builders for invoice movement services. +Centralizes all SQL query construction logic. +""" + + +class TemporaryImportQueries: + """SQL queries for temporary imports using PostgreSQL tables.""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: db_name parameter kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(ped_r1.pedimento_number, '') AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, cmp.remesa, fin.exchange_rate, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, cmp.aduana, ped_r1.pedimento_number, + cmp.edocument, cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num, log.license_plate + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL.""" + # Note: db_name parameter is kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(cmp.provider_id::text, '') AS C8, + COALESCE(cmp.sold_to_id::text, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(il.unit_of_measure::text, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(lc.sector, '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + FALSE AS C40, + '' AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(il.line_number, 0) AS C44, + '' AS C45, + '' AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, '') AS C48, + COALESCE(il.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.item_lines il ON il.item_id = ( + SELECT id FROM a76.items WHERE invoice_id = ih.id LIMIT 1 + ) + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for an invoice.""" + return f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information.""" + return f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number.""" + return f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """ + + +class DefinitiveImportQueries: + """SQL queries for definitive imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(cmp.aduana, '') AS C39, + ih.id AS C35, + COALESCE(ped_r1.pedimento_number, '') AS C42, + COALESCE(cmp.edocument, '') AS C43, + COALESCE(cmp.vucem_operation_num, '') AS C44, + COALESCE(fin.exchange_rate, 0) AS C51, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C52, + COALESCE(ih.capture_user, '') AS C53, + COALESCE(ih.who_updated, '') AS C54, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, + '' AS C57, + '' AS C58, + '' AS C59, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') + AND {where_clause} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, + ih.purchase_order, cmp.aduana, ped_r1.pedimento_number, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + ped.status AS C4, -- [3] + ped.pedimento_code AS C5, -- [4] + '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] + ped.regime AS C10, -- [9] + log.entry_exit_date AS C11, -- [10] + log.delivery_date AS C12, -- [11] + log.payment_date AS C13, -- [12] + log.payment_receipt_num AS C14, -- [13] + '' AS C15, -- [14] + cmp.provider_id AS C16, -- [15] + cmp.sold_to_id AS C17, -- [16] + cmp.customs_broker_id AS C18, -- [17] + '' AS C19, -- [18] + prt.part_number AS C20, -- [19] + ld.description_spanish AS C21, -- [20] + ld.description_english AS C22, -- [21] + lq.quantity AS C23, -- [22] + um.code AS C24, -- [23] + lf.value_mxn AS C25, -- [24] + '' AS C26, -- [25] + lf.value_usd AS C27, -- [26] + '' AS C28, -- [27] + lq.net_weight AS C29, -- [28] + lq.gross_weight AS C30, -- [29] + ih.purchase_order AS C31, -- [30] + lc.fraction AS C32, -- [31] + '' AS C33, '' AS C34, -- [32-33] + ih.id AS C35, -- [34] + '' AS C36, '' AS C37, -- [35-36] + lc.origin_country AS C38, -- [37] + cmp.aduana AS C39, -- [38] + il.material_type AS C40, -- [39] + il.id AS C41, -- [40] + '' AS C42, -- [41] rectification_id + cmp.edocument AS C43, -- [42] + cmp.vucem_operation_num AS C44, -- [43] + il.line_number AS C45, -- [44] + ld.brand AS C46, -- [45] + ld.model AS C47, -- [46] + prt.us_fraction AS C48, -- [47] + prt.eccn AS C49, -- [48] + prt.id AS C50, -- [49] + fin.exchange_rate AS C51, -- [50] + ih.emission_date AS C52, -- [51] + ih.capture_user AS C53, -- [52] + ih.who_updated AS C54, -- [53] + '' AS C55, -- [54] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, -- [55] + '' AS C57, -- [56] Pedimento18 (row[56]) + COALESCE(ld.lot, '') AS C58, -- [57] Lote (row[57]) + '' AS C59, -- [58] TipoPed (row[58]) + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for a definitive import invoice.""" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for definitive imports.""" + # TODO: QSeriesDef table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for definitive imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class RepairImportQueries: + """SQL queries for repair imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + ih.invoice_number AS C2, + COALESCE(ped.pedimento_number, '') AS C3, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C4, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C5, + COALESCE(ped.pedimento_code, '') AS C6, + COALESCE(ped.regime, '') AS C7, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C9, + COALESCE(cmp.remesa::text, '') AS C10, + COALESCE(fin.exchange_rate, 0) AS C11, + COALESCE(cmp.provider_id::text, '') AS C12, + COALESCE(cmp.sold_to_id::text, '') AS C13, + COALESCE(cmp.customs_broker_id::text, '') AS C14, + COALESCE(ih.purchase_order, '') AS C24, + COALESCE(ped.customs_office, '') AS C29, + ih.id AS C30, + COALESCE(cmp.edocument, '') AS C33, + COALESCE(cmp.vucem_operation_num, '') AS C34, + COALESCE(fin.exchange_rate, 0) AS C40, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C41, + COALESCE(ih.capture_user, '') AS C42, + COALESCE(ih.who_updated, '') AS C43, + COALESCE(log.carrier_id, '') AS C44, + COALESCE(log.transport_num, '') AS C45, + COALESCE(ped.pedimento_code, '') AS C47, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build main SQL query for repair import data.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + il.line_number, + ih.invoice_number, + COALESCE(ped.pedimento_number, ''), + TO_CHAR(ih.invoice_date, 'YYYYMMDD'), + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END, + COALESCE(ped.pedimento_code, ''), + COALESCE(ped.regime, ''), + '', + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), + COALESCE(cmp.remesa::text, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(cmp.provider_id::text, ''), + COALESCE(cmp.sold_to_id::text, ''), + COALESCE(cmp.customs_broker_id::text, ''), + COALESCE(il.part_number::text, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lq.quantity, 0), + COALESCE(il.unit_of_measure, 0), + COALESCE(lf.value_mxn, 0), + COALESCE(lf.value_usd, 0), + COALESCE(lq.net_weight, 0), + COALESCE(lq.gross_weight, 0), + COALESCE(ih.purchase_order, ''), + COALESCE(lc.fraction, ''), + '', + COALESCE(lc.sector, ''), + COALESCE(lc.origin_country, ''), + COALESCE(ped.customs_office, ''), + ih.id, + 'P', + '', + COALESCE(cmp.edocument, ''), + COALESCE(cmp.vucem_operation_num, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lc.american_fraction, ''), + COALESCE(prt.eccn, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), ''), + COALESCE(ih.capture_user, ''), + COALESCE(ih.who_updated, ''), + COALESCE(log.carrier_id, ''), + COALESCE(log.transport_num, ''), + '', + COALESCE(ped.pedimento_code, '') + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for a repair import invoice.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for repair imports.""" + # TODO: QSeriesImpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for repair imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportQueries: + """SQL queries for exports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """ + Build optimized query for NORMAL mode (grouped by invoice with totals). + + Args: + db_name: Database name (not used in PostgreSQL version) + where_clause: Additional WHERE conditions (without WHERE keyword) + """ + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(log.payment_receipt_num, '') AS C12, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(cmp.aduana, '') AS C33, + COALESCE(ih.invoice_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE {where_clause} + GROUP BY ih.id, ih.invoice_number, ih.is_updated, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, ih.purchase_order, cmp.aduana, + ih.invoice_type, cmp.edocument, cmp.vucem_operation_num, fin.exchange_rate, + ih.emission_date, ih.capture_user, ih.who_updated, log.transport_id, log.transport_num, + ih.invoice_date + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + '' AS C4, -- [3] + '' AS C5, -- [4] + ped.status AS C6, -- [5] + ped.pedimento_code AS C7, -- [6] + ped.regime AS C8, -- [7] + log.entry_exit_date AS C9, -- [8] + log.delivery_date AS C10, -- [9] + log.payment_date AS C11, -- [10] + log.payment_receipt_num AS C12, -- [11] + '' AS C13, -- [12] + cmp.provider_id AS C14, -- [13] + cmp.sold_to_id AS C15, -- [14] + cmp.customs_broker_id AS C16, -- [15] + '' AS C17, -- [16] + prt.part_number AS C18, -- [17] + ld.description_spanish AS C19, -- [18] + ld.description_english AS C20, -- [19] + lq.quantity AS C21, -- [20] + um.code AS C22, -- [21] + '' AS C23, -- [22] + '' AS C24, -- [23] + lq.net_weight AS C25, -- [24] + lq.gross_weight AS C26, -- [25] + ih.purchase_order AS C27, -- [26] + lc.fraction AS C28, -- [27] + '' AS C29, -- [28] + '' AS C30, -- [29] + '' AS C31, -- [30] + '' AS C32, -- [31] + cmp.aduana AS C33, -- [32] + ih.invoice_type AS C34, -- [33] + ih.id AS C35, -- [34] + lf.value_mxn AS C36, -- [35] + lf.value_usd AS C37, -- [36] + il.material_type AS C38, -- [37] + '' AS C39, -- [38] rectification_id + cmp.edocument AS C40, -- [39] + cmp.vucem_operation_num AS C41, -- [40] + il.line_number AS C42, -- [41] + ld.brand AS C43, -- [42] + ld.model AS C44, -- [43] + prt.us_fraction AS C45, -- [44] + prt.eccn AS C46, -- [45] + prt.id AS C47, -- [46] + fin.exchange_rate AS C48, -- [47] + ih.emission_date AS C49, -- [48] + ih.capture_user AS C50, -- [49] + ih.who_updated AS C51, -- [50] + '' AS C52, -- [51] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, -- [52] NumCaja + '' AS C54, -- [53] Pedimento18 + COALESCE(ld.lot, '') AS C55, -- [54] Lote + '' AS C56, -- [55] TipoPedimentoTransporte + '' AS C57, -- [56] + '' AS C58, -- [57] + '' AS C59, -- [58] + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export invoice. + + Only sums partidas where is_subitem is false (main partidas, not sub-items). + """ + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for exports.""" + # TODO: QSeriesExpo table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for exports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportRepairQueries: + """SQL queries for export repairs (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: discharge_clause temporarily disabled until is_discharged field migrated + discharge_filter = "" # Will be: " AND il.is_discharged = true/false" when ready + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'exp' + AND ih.invoice_type = 'REP' + {"AND " + where_str if where_str else ""} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, ih.document_type, + cmp.edocument, cmp.vucem_operation_num, ih.invoice_date, ih.capture_user, + ih.who_updated, log.carrier_id, log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for export repair data.""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + COALESCE(fin.value_me, 0) AS C4, + COALESCE(fin.value_mn, 0) AS C5, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + '' AS C9, + '' AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + '' AS C17, + COALESCE(cls.class_code, '') AS C18, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(cls.description_en, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, + COALESCE(lq.quantity, 0) AS C21, + COALESCE(il.unit_of_measure, 0) AS C22, + COALESCE(lf.customs_value_mxn, 0) AS C23, + COALESCE(lf.customs_value_usd, 0) AS C24, + COALESCE(lq.net_weight, 0) AS C25, + COALESCE(lq.gross_weight, 0) AS C26, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(lc.fraction, '') AS C28, + COALESCE(lc.fraction_type, '') AS C29, + COALESCE(lc.advalorem_numeric, 0) AS C30, + COALESCE(lc.sector, '') AS C31, + COALESCE(lc.origin_country, '') AS C32, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(lf.value_mxn, 0) AS C36, + COALESCE(lf.value_usd, 0) AS C37, + 'P' AS C38, + '' AS C39, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(il.line_number, 0) AS C42, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, + COALESCE(cls.us_fraction, '') AS C45, + COALESCE(prt.eccn, '') AS C46, + COALESCE(il.part_number::text, '') AS C47, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + '' AS C54, + COALESCE(ld.lot, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + '' AS C59 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') + AND UPPER(ih.invoice_type) IN ('DEF', 'REP', 'EXDEF', 'MATDE') + AND {where_str} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export repair invoice.""" + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for export repairs.""" + # TODO: QSeriesExpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for export repairs.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py new file mode 100644 index 00000000..0a4619ab --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -0,0 +1,391 @@ +""" +Repair import service - handles IMPRE movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportRepairFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import RepairImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class RepairImportService: + """Service for handling repair import movements (IMPRE).""" + + def get_movements( + self, + db: Session, + filters: "ImportRepairFilter" + ) -> List["MovementItem"]: + """ + Get repair import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching repair import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(RepairImportQueries.build_aggregated_query( + filters.database_name, + where_clause, + filters.discharge_filter.value + )) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} repair import invoices") + + movements = [] + + for row in results: + factura = row[0] # C2 - FacturaImpoRep + estatus = row[3] # C5 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[14] # C30 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = row[24] # total_me from SUM aggregation + total_mn = row[25] # total_mn from SUM aggregation + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[17], # C40 - TipoCambio + fecha_pago=row[6], # C9 - Fecha_Pago + fecha_inicio='', # Not available in aggregated query + tipo_pedimento=row[23], # C47 - pedimento_code (used as tipo_pedimento) + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C3 - PedimentoImpoRep + '', # PedRectifica not in aggregated query + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C3 - PedimentoImpoRep + FechaFactura=parse_yyyymmdd_date(row[2]), # C4 - FechaFactura + Estatus=row[3], # C5 - Estatus + ClavePed=row[4], # C6 - ClavePed + TipoMovTemDef='IMPRE', + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[15], # C33 - EDocument + NumOperacionVU=row[16], # C34 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[19], # C42 - UsuarioCap + UsuarioAcr=row[20], # C43 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[6]), # C9 - Fecha_Pago + NumCaja=row[22], # C45 - Transport num + Pedimento18='', # Not in aggregated query + AduanaCru=row[13], # C29 - customs_office + Lote='' # Not in aggregated query + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching repair import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportRepairFilter" + ) -> List["MovementItemDetailed"]: + """ + Get repair import movements (detailed mode - line by line). + + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed repair import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause with discharge filter + where_clause = self._build_where_clause(filters) + + # Add discharge filter to WHERE clause + discharge_clause = "" + if filters.discharge_filter.value == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif filters.discharge_filter.value == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(RepairImportQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed repair import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + continue + + # Get all detailed information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[17] + ) + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[38] + ) + + # Calculate values using unified method + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # EsSubPartida + valor_me=row[26], + valor_mn_direct=row[24], + fecha_pago=row[12], + fecha_inicio=row[10], + clave_ped=row[58], + tipo_cambio_partida=row[50], + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + if row[39] == 'P': + peso_neto = float(row[28]) if row[28] else 0.0 + peso_bruto = float(row[29]) if row[29] else 0.0 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[40], row[44], filters.is_shelter + ) + + simbolo_ex = None + if row[49]: + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[49], filters.is_shelter + ) + + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, row[1], row[41], filters.is_shelter + ) + + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[0] + ) + + movement = MovementItemDetailed( + Linea=row[44], + Factura=row[0], + Pedimento=row[1], + FechaFactura=row[2], + Estatus=row[3], + ClavePed=row[4], + TipoMovTemDef='IMPRE', + EsCambioRegimen='N', + Regimen=row[9], + Fecha_Inicio=row[10], + Fecha_Fin=row[11], + Fecha_Pago=row[12], + Remesa=row[13], + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[19], + DescripcionE=StringHelper.clean_text(row[20]), + DescripcionI=StringHelper.clean_text(row[21]), + CantidadIE=float(row[22]) if row[22] else 0.0, + UniMed=row[23], + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[30], + FraccionArancelaria=row[31], + Preferencia=row[32], + Sector=row[34], + PaisOrigen=row[37], + Aduana=aduana_nombre, + Advalorem=row[39], + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[42], + NumOperacionVU=row[43], + Series=series_info, + Marca=StringHelper.clean_text(row[45]), + Modelo=StringHelper.clean_text(row[46]), + FraccionAmericana=row[47], + ECCN=row[48], + SimboloEx=simbolo_ex, + FechaEmision=row[51], + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[52], + UsuarioAcr=row[53], + Transportista=row[54], + NumCaja=row[55], + Pedimento18=row[56], + AduanaCru=row[38], + Lote=row[57] + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed repair import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportRepairFilter") -> str: + """Build WHERE clause for repair imports query.""" + where_conditions = [] + + # STRICT SEPARATION: Only imports for repair + where_conditions.append("ih.operation_type = 'imp'") + # GOLDEN RULE: If coming from /all, only filter by operation_type + if hasattr(filters, 'discharge_filter') and filters.discharge_filter == 'ALL': + # ALL mode: bring all imports without filtering by specific invoice_type + pass + else: + where_conditions.append("ih.invoice_type IN ('REP', 'MATREP')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id = {filters.provider}") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int, discharge_filter: str) -> tuple: + """Calculate totals for main partidas with discharge filter.""" + # Build discharge clause + # Note: is_discharged field not yet migrated to PostgreSQL schema + discharge_clause = "" + # Temporarily disabled until schema migration: + # if discharge_filter == "SiDes": + # discharge_clause = " AND il.is_discharged = true" + # elif discharge_filter == "NoDes": + # discharge_clause = " AND il.is_discharged = false" + + sql = text(f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + AND il.is_subitem = false + {discharge_clause} + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py new file mode 100644 index 00000000..1e4ae9b2 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -0,0 +1,386 @@ +""" +Temporary import service - handles IMTEM movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportTemporaryFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import TemporaryImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class TemporaryImportService: + """Service for handling temporary import movements (IMTEM).""" + + def get_movements( + self, + db: Session, + filters: "ImportTemporaryFilter" + ) -> List["MovementItem"]: + """ + Get temporary import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching temporary import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode (GROUP BY with totals) + sql = text(TemporaryImportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} temporary import invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaImpo + estatus = row[3] # C4 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[15] # C39 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = row[27] # total_me from SUM aggregation + total_mn = row[28] # total_mn from SUM aggregation + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[19], # C50 - TipoCambio + fecha_pago=row[8], # C13 - Fecha_Pago + fecha_inicio=row[6], # C11 - Fecha_Inicio + tipo_pedimento=row[26], # C58 - TIPOPEDIMENTOTRANSPORTEE + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, # Not used for temporary imports + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpo + row[16], # C41 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Helper to convert empty strings to None + def none_if_empty(val): + return None if val == '' else val + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoImpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMTEM', + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[17], # C42 - EDocument + NumOperacionVU=row[18], # C43 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[21], # C52 - UsuarioCap + UsuarioAcr=row[22], # C53 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(none_if_empty(row[8])), # C13 - Fecha_Pago + NumCaja=row[23], # C55 - Transporte + NumTrasporte + Pedimento18=row[24], # C56 - Pedimento18 + AduanaCru=row[14], # C38 - Aduana_Cruce + Lote=row[25] # C57 - LOTE + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} temporary import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching temporary import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportTemporaryFilter" + ) -> List["MovementItemDetailed"]: + """ + Get temporary import movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed temporary import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute main query + sql = text(TemporaryImportQueries.build_main_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed temporary import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + continue + + # Get provider information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True # C16 - Proveedor + ) + + # Get buyer information + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False # C17 - VendidoA + ) + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[17] # C18 - AAduanal + ) + + # Get customs section name + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[37] # C38 - Aduana_Cruce + ) + + # Calculate values (only for main partidas 'P', not subpartidas 'S') + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=row[26], # C27 - ValorImpoME + valor_mn_direct=row[24], # C25 - ValorImpoMN + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C11 - Fecha_Inicio + clave_ped=row[57], # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + if row[39] == 'P': # C40 - EsSubPartida + peso_neto = float(row[28]) if row[28] else 0.0 # C29 + peso_bruto = float(row[29]) if row[29] else 0.0 # C30 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + # Get series information + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[38], row[43], filters.is_shelter # C39, C44 + ) + + # Get part export symbol + simbolo_ex = None + if row[48]: # C49 - NumParte + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[48], filters.is_shelter + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpo + row[40], # C41 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[0] # C1 - FacturaImpo + ) + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[43], # C44 - LineaImpo + Factura=row[0], # C1 - FacturaImpo + Pedimento=row[1], # C2 - PedimentoImpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMTEM', + EsCambioRegimen='N', + Regimen=row[9], # C10 - Regimen + Fecha_Inicio=row[10], # C11 - Fecha_Inicio + Fecha_Fin=row[11], # C12 - Fecha_Fin + Fecha_Pago=row[12], # C13 - Fecha_Pago + Remesa=row[13], # C14 - Remesa + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[19], # C20 - Clase (NumParte) + DescripcionE=StringHelper.clean_text(row[20]), # C21 + DescripcionI=StringHelper.clean_text(row[21]), # C22 + CantidadIE=float(row[22]) if row[22] else 0.0, # C23 + UniMed=row[23], # C24 + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[30], # C31 - OrdenCompra + FraccionArancelaria=row[31], # C32 - Fraccion + Preferencia=row[32], # C33 - TipoFraccion + Sector=row[34], # C35 - Sector + PaisOrigen=row[36], # C37 - PaisOrigen + Aduana=aduana_nombre, + Advalorem=row[39], # C40 - EsSubPartida + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[41], # C42 - EDocument + NumOperacionVU=row[42], # C43 - NumOperacionVU + Series=series_info, + Marca=StringHelper.clean_text(row[44]), # C45 + Modelo=StringHelper.clean_text(row[45]), # C46 + FraccionAmericana=row[46], # C47 - FraccionAme + ECCN=row[47], # C48 - ECCN + SimboloEx=simbolo_ex, + FechaEmision=row[50], # C51 - FechaEmision + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[51], # C52 - UsuarioCap + UsuarioAcr=row[52], # C53 - UsuarioAct + Transportista=row[53], # C54 - Transportista + NumCaja=row[54], # C55 - Transporte + NumTrasporte + Pedimento18=row[55], # C56 - Pedimento18 + AduanaCru=row[37], # C38 - Aduana_Cruce + Lote=row[56] # C57 - LOTE + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed temporary import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed temporary import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportTemporaryFilter") -> str: + """Build WHERE clause for temporary imports query using PostgreSQL tables.""" + where_conditions = [] + + # STRICT SEPARATION: Only temporary imports + where_conditions.append("ih.operation_type = 'imp'") + # GOLDEN RULE: If coming from /all, only filter by operation_type + # otherwise, apply specific invoice_type filter + if not hasattr(filters, 'from_all_endpoint') or not filters.from_all_endpoint: + where_conditions.append("ih.invoice_type IN ('TEM', 'MATTEM')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id::text = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id::text = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) if where_conditions else "1=1" + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """Calculate totals for main partidas only using PostgreSQL. + + Only sums partidas where is_subpartida is false (equivalent to EsSubpartida = 'P' in Clarion). + """ + sql = text(""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + JOIN a76.item_lines il ON il.id = lf.item_line_id + JOIN a76.items i ON i.id = il.item_id + WHERE i.invoice_id = :consecutivo + AND COALESCE(il.is_subpartida, false) = false + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py b/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py new file mode 100644 index 00000000..66c888df --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py @@ -0,0 +1,2115 @@ +import logging +from sqlalchemy import text +from sqlalchemy.orm import Session +import configparser +import os +from typing import List, Optional +from datetime import datetime +from decimal import Decimal + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + MovementItem, + MovementItemDetailed, + RangeType +) + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Service for handling movement operations, particularly temporary import movements. + Integrates with legacy SQL Server databases for data extraction. + """ + + def _get_met_trans_config(self) -> int: + """ + Read MetTrans configuration from Scaii.ini file. + + Returns: + MetTrans value (0 or 1) + """ + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + return met_trans + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + return 0 + + def _build_where_clause_temporary(self, filters: ImportTemporaryFilter) -> tuple: + """ + Build WHERE clause and parameters for temporary imports query. + + Returns: + Tuple of (where_string, params_dict) + """ + where_clauses = [] + params = {} + + # Date range filter + if filters.range_type.value == 'FF': + where_clauses.append("EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date") + else: + where_clauses.append("EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date") + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + # Status filter + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + # Buyer filter + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + # Pedimento code filter + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + return " AND ".join(where_clauses), params + + def _build_where_clause_definitive(self, filters: ImportDefinitiveFilter) -> str: + """ + Build WHERE clause for definitive imports query. + + Returns: + WHERE clause string + """ + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + + return " AND ".join(where_conditions) + + def _calculate_exchange_rate_and_value( + self, + db: Session, + db_name: str, + valor_me: float, + valor_mn: float, + tipo_cambio_db: float, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + currency_type: str, + exchange_rate_type: str, + is_shelter: bool, + use_transport_method: bool, + met_trans: int + ) -> tuple: + """ + Unified method to calculate exchange rate and commercial value. + Eliminates duplicated logic across temporary and definitive imports. + + Args: + db: Database session + db_name: Database name + valor_me: Value in foreign currency + valor_mn: Value in local currency + tipo_cambio_db: Exchange rate from database + fecha_pago: Payment date + fecha_inicio: Start date + tipo_pedimento: Pedimento type + currency_type: "ME" or "MN" + exchange_rate_type: "FP" or "FF" + is_shelter: Shelter company flag + use_transport_method: Use transport method flag + met_trans: MetTrans value from config + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio) + """ + # Foreign currency case - simpler + if currency_type == "ME": + valor_comercial = valor_me + tipo_cambio = tipo_cambio_db + + # Try to get exchange rate if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = self._get_fecha_tipo_cambio( + fecha_pago, fecha_inicio, tipo_pedimento, use_transport_method, met_trans + ) + tc_value = self._obtener_tipo_cambio(db, db_name, fecha_tc, is_shelter) + if tc_value: + tipo_cambio = tc_value + + return valor_comercial, tipo_cambio + + # Local currency case - more complex + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = self._get_fecha_tipo_cambio( + fecha_pago, fecha_inicio, tipo_pedimento, use_transport_method, met_trans + ) + tc_value = self._obtener_tipo_cambio(db, db_name, fecha_tc, is_shelter) + + if tc_value: + return valor_me * tc_value, tc_value + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + return valor_mn, tipo_cambio_db + else: + return valor_mn, tipo_cambio_db + + def _get_fecha_tipo_cambio( + self, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + use_transport_method: bool, + met_trans: int + ): + """ + Determine which date to use for exchange rate lookup. + + Returns: + Date to use for exchange rate + """ + fecha = fecha_pago + if use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha = fecha_inicio + return fecha + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """ + Retrieve temporary import movements from legacy database. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching temporary import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause dynamically based on filters + where_clauses = [] + params = {} + + # Date range filter + if filters.range_type == 'FF': + where_clauses.append( + "EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date" + ) + else: + where_clauses.append( + "EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date" + ) + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + # Status filter + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + # Buyer filter + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + # Pedimento code filter + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + where_str = " AND ".join(where_clauses) + db_name = filters.database_name + + logger.debug(f"WHERE clause: {where_str}") + logger.debug(f"Query params: {params}") + + # Main Query (using shared query builder) + sql_query = text(self._build_main_query(db_name, where_str)) + + try: + result = db.execute(sql_query, params) + rows = result.fetchall() + logger.info(f"Query returned {len(rows)} rows") + except Exception as e: + logger.error(f"Error executing main query: {e}") + raise Exception(f"Database query failed: {str(e)}") + + movements = [] + processed_facturas = set() + + for row in rows: + if filters.report_type == 'Normal': + C1_Factura = row[0] + + if C1_Factura in processed_facturas: + continue + + qcsv_ie = {} + processed_facturas.add(C1_Factura) + + C39_Consecutivo = row[38] + + # Totalize Items (sum values for main partidas only) + sql_total = text(f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """) + + try: + res_total = db.execute(sql_total, {"consecutivo": C39_Consecutivo}).fetchone() + val_total_me = float(res_total[0]) if res_total and res_total[0] is not None else 0.0 + val_total_mn = float(res_total[1]) if res_total and res_total[1] is not None else 0.0 + except Exception as e: + logger.warning(f"Error calculating totals for consecutivo {C39_Consecutivo}: {e}") + val_total_me = 0.0 + val_total_mn = 0.0 + + qcsv_ie['Factura'] = row[0] + qcsv_ie['Pedimento'] = row[1] + qcsv_ie['FechaFactura'] = row[2] + qcsv_ie['Estatus'] = row[3] + qcsv_ie['ClavePed'] = row[4] + qcsv_ie['TipoMovTemDef'] = 'IMTEM' + qcsv_ie['EsCambioRegimen'] = 'N' + + row_c13 = row[12] # Fecha_Pago + row_c11 = row[10] # Fecha_Inicio + row_c58 = row[57] # TIPOPEDIMENTOTRANSPORTEE + row_c50 = row[49] # TipoCambio + row_c41 = row[40] # PedRectifica + row_c2 = row[1] # PedimentoImpo + + calculated_tc = row_c50 + + # Calculate values based on currency type + if filters.currency_type == 'ME': + qcsv_ie['ValorMPTemp'] = val_total_me + qcsv_ie['ValorComercialMN'] = val_total_me + + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio( + db, db_name, row_c13, row_c11, row_c58, met_trans + ) + qcsv_ie['TipoCambio'] = calculated_tc if calculated_tc > 0 else row_c50 + else: + qcsv_ie['TipoCambio'] = row_c50 + else: + if filters.is_shelter: + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio_mn(db, db_name, row_c13, row_c11, row_c58, met_trans) + qcsv_ie['ValorMPTemp'] = val_total_me * calculated_tc + qcsv_ie['ValorComercialMN'] = val_total_me * calculated_tc + qcsv_ie['TipoCambio'] = calculated_tc + else: + qcsv_ie['ValorMPTemp'] = val_total_mn + qcsv_ie['ValorComercialMN'] = val_total_mn + qcsv_ie['TipoCambio'] = row_c50 + else: + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio(db, db_name, row_c13, row_c11, row_c58, met_trans) + qcsv_ie['ValorMPTemp'] = val_total_me * calculated_tc + qcsv_ie['ValorComercialMN'] = val_total_me * calculated_tc + qcsv_ie['TipoCambio'] = calculated_tc + else: + qcsv_ie['ValorMPTemp'] = val_total_mn + qcsv_ie['ValorComercialMN'] = val_total_mn + qcsv_ie['TipoCambio'] = row_c50 + + qcsv_ie['ValorAgre'] = 0.0 + qcsv_ie['TipoExpo'] = '' + + if filters.is_shelter: + qcsv_ie['PedimentoR1'] = row_c41 + else: + qcsv_ie['PedimentoR1'] = self._buscar_rectificacion(db, db_name, row_c2, row_c41) + + qcsv_ie['EDocument'] = row[41] + qcsv_ie['NumOperacionVU'] = row[42] + qcsv_ie['BaseDeDatos'] = db_name + + # Get driver badge number (gafete) + sql_gafete = text(f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + try: + res_gafete = db.execute(sql_gafete, {"factura": row[0]}).fetchone() + qcsv_ie['NumGafUni'] = res_gafete[0] if res_gafete and res_gafete[0] else None + except Exception as e: + logger.debug(f"Could not retrieve badge for invoice {row[0]}: {e}") + qcsv_ie['NumGafUni'] = None + + qcsv_ie['UsuarioCap'] = row[51] + qcsv_ie['UsuarioAcr'] = row[52] + qcsv_ie['Fecha_Pago'] = row[12] + qcsv_ie['NumCaja'] = row[54] + qcsv_ie['Pedimento18'] = row[55] + qcsv_ie['AduanaCru'] = row[37] + qcsv_ie['Lote'] = row[56] + + movements.append(MovementItem(**qcsv_ie)) + + return movements + + def _obtener_tipo_cambio( + self, + db: Session, + db_name: str, + fecha, + is_shelter: bool + ) -> Optional[float]: + """ + Get exchange rate for the given date. + Simplified version that works with both shelter and non-shelter logic. + + Args: + db: Database session + db_name: Legacy database name + fecha: Date for exchange rate lookup + is_shelter: Shelter company flag (currently not used but kept for compatibility) + + Returns: + Exchange rate as float, or None if not found + """ + if not fecha: + return None + + try: + sql_tc = text(f""" + SELECT TOP 1 Valor + FROM [{db_name}].dbo.GTipoCambio + WHERE Fecha = :fecha + ORDER BY Fecha DESC + """) + res = db.execute(sql_tc, {"fecha": fecha}).fetchone() + if res and res[0]: + return float(res[0]) + else: + logger.warning(f"Exchange rate not found for date {fecha}") + return None + except Exception as e: + logger.error(f"Error fetching exchange rate for date {fecha}: {e}") + return None + + def _buscar_rectificacion( + self, + pedimento: str, + ped_rectifica: Optional[str] + ) -> Optional[str]: + """ + Search for pedimento rectification. + Simplified version - returns the rectification value from database. + + Args: + pedimento: Original pedimento number + ped_rectifica: Rectification pedimento from query + + Returns: + Rectification pedimento number or None + """ + # TODO: Implement full rectification search logic if needed + # For now, returning the value from the query + return ped_rectifica + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed temporary import movements (line by line) from legacy database. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of detailed movement items (one per line/partida) + """ + logger.info(f"Fetching DETAILED temporary import movements with filters: {filters.model_dump()}") + + # Read INI configuration + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause (same as normal report) + where_clauses = [] + params = {} + + if filters.range_type == 'FF': + where_clauses.append( + "EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date" + ) + else: + where_clauses.append( + "EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date" + ) + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + where_str = " AND ".join(where_clauses) + db_name = filters.database_name + + logger.debug(f"WHERE clause: {where_str}") + logger.debug(f"Query params: {params}") + + # Same main query as normal report + sql_query = text(self._build_main_query(db_name, where_str)) + + try: + result = db.execute(sql_query, params) + rows = result.fetchall() + logger.info(f"Query returned {len(rows)} rows for detailed processing") + except Exception as e: + logger.error(f"Error executing main query: {e}") + raise Exception(f"Database query failed: {str(e)}") + + movements = [] + + # Process each row individually (detailed mode) + for row in rows: + item = {} + + # Basic invoice info + item['Linea'] = row[43] # C44 - LineaImpo + item['Factura'] = row[0] # C1 + item['Pedimento'] = row[1] # C2 + item['FechaFactura'] = row[2] # C3 + item['Estatus'] = row[3] # C4 + item['ClavePed'] = row[4] # C5 + item['TipoMovTemDef'] = 'IMTEM' + item['EsCambioRegimen'] = 'N' + item['Regimen'] = row[9] # C10 + item['Fecha_Inicio'] = row[10] # C11 + item['Fecha_Fin'] = row[11] # C12 + item['Fecha_Pago'] = row[12] # C13 + item['Remesa'] = row[13] # C14 + + # Get provider information + provider_code = row[15] # C16 - Proveedor + provider_info = self._get_client_provider_info(db, db_name, provider_code, filters.is_shelter) + item['Proveedor'] = provider_info.get('nombre') + item['RFCProveedor'] = provider_info.get('rfc') + item['ProveedorTaxID'] = provider_info.get('tax_id') + + # Get buyer information + buyer_code = row[16] # C17 - VendidoA + buyer_info = self._get_client_buyer_info(db, db_name, buyer_code, filters.is_shelter) + item['VendidoA'] = buyer_info.get('nombre') + item['VendidoARFC'] = buyer_info.get('rfc') + item['VendidoATaxID'] = buyer_info.get('tax_id') + + # Get customs broker info + customs_broker_code = row[17] # C18 - AAduanal + broker_info = self._get_customs_broker_info(db, db_name, customs_broker_code) + item['AgenteAduanal'] = broker_info.get('nombre') + item['Patente'] = broker_info.get('patente') + + # Item details + item['NumParte'] = row[19] # C20 - Clase (NumParte) + item['DescripcionE'] = self._clean_text(row[20]) # C21 - Already cleaned in query + item['DescripcionI'] = self._clean_text(row[21]) # C22 - Already cleaned in query + item['CantidadIE'] = float(row[22]) if row[22] else 0.0 # C23 + item['UniMed'] = row[23] # C24 + + # Values and exchange rate (only for main partidas, not subpartidas) + if row[39] == 'P': # C40 - EsSubPartida == 'P' + # Calculate value based on currency type + if filters.currency_type == 'MN': + if filters.is_shelter: + if filters.exchange_rate_type == 'FP' and row[12]: # C13 - Fecha_Pago + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['ValorComercialMN'] = float(row[26]) * tc if row[26] else 0.0 # C27 * TC + item['TipoCambio'] = tc + else: + item['ValorComercialMN'] = float(row[24]) if row[24] else 0.0 # C25 + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + else: + if filters.exchange_rate_type == 'FP' and row[12]: + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['ValorComercialMN'] = float(row[26]) * tc if row[26] else 0.0 # C27 * TC + item['TipoCambio'] = tc + else: + item['ValorComercialMN'] = float(row[24]) if row[24] else 0.0 # C25 + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + elif filters.currency_type == 'ME': + item['ValorComercialMN'] = float(row[26]) if row[26] else 0.0 # C27 + if filters.exchange_rate_type == 'FP' and row[12]: + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['TipoCambio'] = tc if tc > 0 else float(row[49]) if row[49] else 0.0 + else: + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + + item['PesoNeto'] = float(row[28]) if row[28] else 0.0 # C29 + item['PesoBruto'] = float(row[29]) if row[29] else 0.0 # C30 + elif row[39] == 'S': # Subpartida + item['ValorComercialMN'] = 0.0 + item['PesoNeto'] = 0.0 + item['PesoBruto'] = 0.0 + item['TipoCambio'] = 0.0 + + # Additional fields + item['OrdenCompraVenta'] = row[30] # C31 + item['FraccionArancelaria'] = row[31] # C32 + item['Preferencia'] = row[32] # C33 + item['Sector'] = row[34] # C35 + item['PaisOrigen'] = row[36] # C37 + + # Get customs office name + aduana_code = row[37] # C38 - Aduana_Cruce + aduana_name = self._get_customs_office_name(db, db_name, aduana_code) + item['Aduana'] = aduana_name + + item['Advalorem'] = row[39] # C40 + item['TipoExpo'] = '' + + # Rectification + if filters.is_shelter: + item['PedimentoR1'] = row[40] # C41 + else: + item['PedimentoR1'] = self._buscar_rectificacion(db, db_name, row[1], row[40]) + + item['EDocument'] = row[41] # C42 + item['NumOperacionVU'] = row[42] # C43 + + # Get series information + consecutivo = row[38] # C39 + linea_impo = row[43] # C44 + series_info = self._get_series_info(db, db_name, consecutivo, linea_impo, filters.is_shelter) + item['Series'] = series_info + + item['Marca'] = row[44] # C45 + item['Modelo'] = row[45] # C46 + item['FraccionAmericana'] = row[46] # C47 + item['ECCN'] = row[47] # C48 + + # Get export symbol from parts + num_parte = row[48] # C49 + if num_parte: + simbolo_ex = self._get_part_export_symbol(db, db_name, num_parte, filters.is_shelter) + item['SimboloEx'] = simbolo_ex + else: + item['SimboloEx'] = None + + item['FechaEmision'] = row[50] # C51 + item['BaseDeDatos'] = db_name + + # Get driver badge + factura = row[0] # C1 + try: + sql_gafete = text(f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + res_gafete = db.execute(sql_gafete, {"factura": factura}).fetchone() + item['NumGafUni'] = res_gafete[0] if res_gafete and res_gafete[0] else None + except Exception as e: + logger.debug(f"Could not retrieve badge for invoice {factura}: {e}") + item['NumGafUni'] = None + + item['UsuarioCap'] = row[51] # C52 + item['UsuarioAcr'] = row[52] # C53 + item['Transportista'] = row[53] # C54 + item['NumCaja'] = row[54] # C55 + item['Pedimento18'] = row[55] # C56 + item['AduanaCru'] = row[37] # C38 + item['Lote'] = row[56] # C57 + + movements.append(MovementItemDetailed(**item)) + + logger.info(f"Processed {len(movements)} detailed movement items") + return movements + + def _build_main_query(self, db_name: str, where_str: str) -> str: + """Build the main SQL query for fetching invoice data""" + return f""" + SELECT + EqiFim.FacturaImpo AS C1, + EqiFim.PedimentoImpo AS C2, + EqiFim.FechaFactura AS C3, + EqiFim.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiFim.ValorImpoME AS C6, + EqiFim.ValorImpoMN AS C7, + EqiFim.Proveedor AS C8, + EqiFim.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFim.Remesa AS C14, + EqiFim.TipoCambio AS C15, + EqiFim.Proveedor AS C16, + EqiFim.VendidoA AS C17, + EqiFim.AAduanal AS C18, + '' AS C19, + EqiPim.Clase AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.DescripcionE, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(ClaAct.DescripcionI, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C22, + EqiPim.CantImpo AS C23, + EqiPim.UnidadMedida AS C24, + EqiPim.ValorImpoMN AS C25, + EqiPim.ValorAduanasMN AS C26, + EqiPim.ValorImpoME AS C27, + EqiPim.ValorAduanasME AS C28, + EqiPim.PesoNeto AS C29, + EqiPim.PesoBruto AS C30, + EqiPim.OrdenCompra AS C31, + EqiPim.Fraccion AS C32, + EqiPim.TipoFraccion AS C33, + EqiPim.AdvImpo AS C34, + EqiPim.Sector AS C35, + EqiPim.MontoIgi AS C36, + EqiPim.PaisOrigen AS C37, + EqiPed.Aduana_Cruce AS C38, + EqiFim.Consecutivo AS C39, + EqiPim.EsSubPartida AS C40, + EqiPed.PedRectifica AS C41, + EqiFim.EDocument AS C42, + EqiFim.NumOperacionVU AS C43, + EqiPim.LineaImpo AS C44, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.Marca, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.Modelo, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C46, + ClaAct.FraccionAme AS C47, + ClaAct.ECCN AS C48, + EqiPim.NumParte AS C49, + EqiFim.TipoCambio AS C50, + EqiFim.FechaEmision AS C51, + EqiFim.UsuarioCap AS C52, + EqiFim.UsuarioAct AS C53, + EqiFim.Transportista AS C54, + EqiFim.Transporte + ' ' + EqiFim.NumTrasporte AS C55, + EqiPed.Pedimento18 AS C56, + EqiPim.LOTE AS C57, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C58 + FROM [{db_name}].dbo.QFacImp EqiFim + LEFT JOIN [{db_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFim.PedimentoImpo + LEFT JOIN [{db_name}].dbo.QEqiMaq EqiPim + ON EqiPim.Consecutivo = EqiFim.Consecutivo + LEFT JOIN [{db_name}].dbo.QClaAct ClaAct + ON ClaAct.Clase = EqiPim.Clase + WHERE {where_str} + """ + + def _clean_text(self, text: Optional[str]) -> Optional[str]: + """Clean text by removing special characters""" + if not text: + return None + return text.strip() + + def _get_client_provider_info(self, db: Session, db_name: str, client_code: str, is_shelter: bool) -> dict: + """Get provider/client information""" + if not client_code: + return {"nombre": None, "rfc": None, "tax_id": None} + + try: + sql = text(f""" + SELECT TOP 1 Nombre, RFC, TaxID + FROM [{db_name}].dbo.GClientesPro + WHERE Cliente = :cliente + """) + result = db.execute(sql, {"cliente": client_code}).fetchone() + + if result: + return { + "nombre": self._clean_text(result[0]), + "rfc": result[1], + "tax_id": result[2] + } + except Exception as e: + logger.warning(f"Error fetching provider info for {client_code}: {e}") + + return {"nombre": None, "rfc": None, "tax_id": None} + + def _get_client_buyer_info(self, db: Session, db_name: str, client_code: str, is_shelter: bool) -> dict: + """Get buyer information (same structure as provider)""" + return self._get_client_provider_info(db, db_name, client_code, is_shelter) + + def _get_customs_broker_info(self, db: Session, db_name: str, broker_code: str) -> dict: + """Get customs broker information""" + if not broker_code: + return {"nombre": None, "patente": None} + + try: + sql = text(f""" + SELECT TOP 1 Nombre, Patente + FROM [{db_name}].dbo.GAAduanal + WHERE ClaveAA = :clave + """) + result = db.execute(sql, {"clave": broker_code}).fetchone() + + if result: + return { + "nombre": result[0], + "patente": result[1] + } + except Exception as e: + logger.warning(f"Error fetching customs broker info for {broker_code}: {e}") + + return {"nombre": None, "patente": None} + + def _get_customs_office_name(self, db: Session, db_name: str, aduana_code: str) -> Optional[str]: + """Get customs office name""" + if not aduana_code: + return None + + try: + sql = text(f""" + SELECT TOP 1 REPLACE(REPLACE(REPLACE(REPLACE(Nombre, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') + FROM [{db_name}].dbo.GAduanaSec + WHERE AduanaSeccion = :aduana + """) + result = db.execute(sql, {"aduana": aduana_code}).fetchone() + return result[0] if result else None + except Exception as e: + logger.warning(f"Error fetching customs office name for {aduana_code}: {e}") + return None + + def _get_series_info(self, db: Session, db_name: str, consecutivo: str, linea_impo: str, is_shelter: bool) -> Optional[str]: + """Get series information for an item""" + if not consecutivo or not linea_impo: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """) + result = db.execute(sql, {"consecutivo": consecutivo, "linea": linea_impo}).fetchall() + + if not result: + return None + + # Build series string + series_parts = [] + for idx, row in enumerate(result, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_parts.append(serie_str) + + return " | ".join(series_parts) if series_parts else None + + except Exception as e: + logger.warning(f"Error fetching series for {consecutivo}/{linea_impo}: {e}") + return None + + def _get_part_export_symbol(self, db: Session, db_name: str, num_parte: str, is_shelter: bool) -> Optional[str]: + """Get export symbol/license for a part number""" + if not num_parte: + return None + + try: + sql = text(f""" + SELECT TOP 1 SimboloExcLic + FROM [{db_name}].dbo.QPartes + WHERE NumParte = :num_parte + """) + result = db.execute(sql, {"num_parte": num_parte}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching export symbol for part {num_parte}: {e}") + return None + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """ + Retrieve definitive import movements from legacy database (LLENADODEFINITIVO - NORMAL). + Aggregates movements by invoice number. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching definitive import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: # FP + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + # If ALL, no filter added + + where_clause = " AND ".join(where_conditions) + + # Build main SQL query + sql_query = text(f""" + SELECT + EqiFid.FacturaImpoDef AS C1, + EqiFid.PedimentoImpoDef AS C2, + EqiFid.FechaFactura AS C3, + EqiFid.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiFid.ValorImpoME AS C6, + EqiFid.ValorImpoMN AS C7, + EqiFid.Proveedor AS C8, + EqiFid.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFid.Remesa AS C14, + EqiFid.TipoCambio AS C15, + EqiFid.AAduanal AS C18, + EqiFid.Consecutivo AS C40, + EqiPed.PedRectifica AS C42, + EqiFid.EDocument AS C43, + EqiFid.NumOperacionVU AS C44, + EqiFid.TipoCambio AS C51, + EqiFid.FechaEmision AS C52, + EqiFid.UsuarioCap AS C53, + EqiFid.UsuarioAct AS C54, + EqiFid.Transportista AS C55, + EqiFid.Transporte + ' ' + EqiFid.NumTrasporte AS C56, + EqiPed.Pedimento18 AS C57, + EqiPed.Aduana_Cruce AS C38, + EqiFid.ProvImpoDefCR AS C39, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C59 + FROM [{filters.database_name}].dbo.QFacImpDef EqiFid + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFid.PedimentoImpoDef + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements_dict = {} + + for row in result: + factura = row[0] # C1 + prov_impo_def_cr = row[28] # C39 + + # Determine movement type + tipo_mov = "COMEX" if prov_impo_def_cr == 'P' else "IMPDF" + + # Use factura + tipo_mov as key + key = (factura, tipo_mov) + + # If already exists, skip (we only want one entry per invoice in Normal mode) + if key not in movements_dict: + consecutivo = row[16] # C40 + fecha_pago = row[12] # C13 + tipo_pedimento = row[29] # C59 + fecha_inicio = row[10] # C11 + + # Calculate total values for this invoice + valor_me, valor_mn = self._calculate_definitive_totals( + db, filters.database_name, consecutivo + ) + + # Calculate exchange rate and values + tipo_cambio = row[20] # C51 + valor_mp_temp = 0.0 + valor_comercial_mn = 0.0 + + if filters.currency_type.value == "ME": + valor_mp_temp = float(valor_me or 0) + valor_comercial_mn = float(valor_me or 0) + tipo_cambio = float(tipo_cambio or 1.0) + else: # MN + if filters.is_shelter: + # Shelter logic with exchange rate calculation + if filters.exchange_rate_type.value == "FP" and fecha_pago: + # Check if special transport method logic applies + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_mp_temp = float(valor_me or 0) * tc_value + valor_comercial_mn = float(valor_me or 0) * tc_value + tipo_cambio = tc_value + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using values from DB") + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + # Non-shelter logic + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_mp_temp = float(valor_me or 0) * tc_value + valor_comercial_mn = float(valor_me or 0) * tc_value + tipo_cambio = tc_value + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + + # Get driver badge number + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Get rectification pedimento + pedimento = row[1] # C2 + ped_rectifica = row[17] # C42 + pedimento_r1 = self._buscar_rectificacion(pedimento, ped_rectifica) + + # Create movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_mp_temp, + ValorComercialMN=valor_comercial_mn, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C43 + NumOperacionVU=row[19], # C44 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C53 + UsuarioAcr=row[23], # C54 + Fecha_Pago=row[12], # C13 + NumCaja=row[25], # C56 + Pedimento18=row[26], # C57 + AduanaCru=row[27], # C38 + Lote=None # Lote comes from EpiDef table, not available in main query + ) + + movements_dict[key] = movement + + movements = list(movements_dict.values()) + logger.info(f"Successfully retrieved {len(movements)} definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching definitive import movements: {e}", exc_info=True) + raise + + def _calculate_definitive_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """ + Calculate total values for a definitive import invoice. + Sums up all partidas (items) excluding sub-partidas. + + Returns: + tuple: (total_valor_me, total_valor_mn) + """ + try: + sql = text(f""" + SELECT SUM(EqiPdf.ValorME), SUM(EqiPdf.ValorMN) + FROM [{db_name}].dbo.QEqiDef EqiPdf + WHERE EqiPdf.Consecutivo = :consecutivo + AND EqiPdf.EsSubpartida = 'P' + """) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> Optional[str]: + """Get driver's unique badge number (NUMGAFETEUNICO) for a definitive import invoice""" + if not factura: + return None + + try: + sql = text(f""" + SELECT NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImpDef + ON QFacImpDef.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpoDef = :factura + """) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for invoice {factura}: {e}") + return None + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed definitive import movements from legacy database (LLENADODEFINITIVO - DETALLADO). + Returns each line/partida as a separate record with full details. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of detailed movement items (one per partida/line) + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching DETAILED definitive import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause (same as normal mode) + where_conditions = [] + + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + + where_clause = " AND ".join(where_conditions) + + # Build detailed SQL query (includes partida/line details) + sql_query = text(f""" + SELECT + EqiFid.FacturaImpoDef AS C1, + EqiFid.PedimentoImpoDef AS C2, + EqiFid.FechaFactura AS C3, + EqiFid.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFid.Remesa AS C14, + EqiFid.TipoCambio AS C15, + EqiFid.Proveedor AS C16, + EqiFid.VendidoA AS C17, + EqiFid.AAduanal AS C18, + EpiDef.Clase AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.DescripcionE, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(EqiCla.DescripcionI, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C22, + EpiDef.CantImpoDef AS C23, + EpiDef.UnidadMedida AS C24, + EpiDef.ValorMN AS C25, + EpiDef.ValorME AS C27, + EpiDef.PesoNeto AS C29, + EpiDef.PesoBruto AS C30, + EpiDef.OrdenCompra AS C31, + EpiDef.Fraccion AS C32, + EpiDef.TipoFraccion AS C33, + EpiDef.Sector AS C35, + EpiDef.PaisOrigen AS C37, + EqiPed.Aduana_Cruce AS C38, + EqiFid.ProvImpoDefCR AS C39, + EqiFid.Consecutivo AS C40, + EpiDef.EsSubPartida AS C41, + EqiPed.PedRectifica AS C42, + EqiFid.EDocument AS C43, + EqiFid.NumOperacionVU AS C44, + EpiDef.LineaImpoDef AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.Marca, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C46, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.Modelo, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C47, + EqiCla.FraccionAme AS C48, + EqiCla.ECCN AS C49, + EpiDef.NumParte AS C50, + EqiFid.TipoCambio AS C51, + EqiFid.FechaEmision AS C52, + EqiFid.UsuarioCap AS C53, + EqiFid.UsuarioAct AS C54, + EqiFid.Transportista AS C55, + EqiFid.Transporte + ' ' + EqiFid.NumTrasporte AS C56, + EqiPed.Pedimento18 AS C57, + EpiDef.Lote AS C58, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C59 + FROM [{filters.database_name}].dbo.QFacImpDef EqiFid + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFid.PedimentoImpoDef + LEFT JOIN [{filters.database_name}].dbo.QEqiDef EpiDef + ON EpiDef.Consecutivo = EqiFid.Consecutivo + LEFT JOIN [{filters.database_name}].dbo.QClaAct EqiCla + ON EqiCla.Clase = EpiDef.Clase + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements = [] + + for row in result: + linea = row[31] # C45 + factura = row[0] # C1 + pedimento = row[1] # C2 + prov_impo_def_cr = row[25] # C39 + es_subpartida = row[27] # C41 + fecha_pago = row[8] # C13 + tipo_pedimento = row[44] # C59 + fecha_inicio = row[6] # C11 + consecutivo = row[26] # C40 + + # Determine movement type + tipo_mov = "COMEX" if prov_impo_def_cr == 'P' else "IMPDF" + + # Get provider info + proveedor_info = self._get_client_provider_info( + db, filters.database_name, row[11], filters.is_shelter # C16 + ) + + # Get buyer info + buyer_info = self._get_client_buyer_info( + db, filters.database_name, row[12], filters.is_shelter # C17 + ) + + # Get customs broker info + broker_info = self._get_customs_broker_info( + db, filters.database_name, row[13] # C18 + ) + + # Calculate commercial value and exchange rate + tipo_cambio = float(row[10] or 1.0) # C15 + valor_comercial_mn = 0.0 + peso_neto = 0.0 + peso_bruto = 0.0 + + # Only process values if it's a Partida (not Subpartida) + if es_subpartida == 'P': + if filters.currency_type.value == "MN": + if filters.is_shelter: + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_comercial_mn = float(row[20] or 0) * tc_value # C27 * TC + tipo_cambio = tc_value + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_comercial_mn = float(row[20] or 0) * tc_value # C27 * TC + tipo_cambio = tc_value + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: # ME + valor_comercial_mn = float(row[20] or 0) # C27 + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + tipo_cambio = tc_value + else: + tipo_cambio = float(row[37] or 1.0) # C51 + else: + tipo_cambio = float(row[37] or 1.0) # C51 + + peso_neto = float(row[21] or 0) # C29 + peso_bruto = float(row[22] or 0) # C30 + # If es_subpartida == 'S', values remain 0 + + # Get customs office name + aduana_nombre = self._get_customs_office_name( + db, filters.database_name, row[24] # C38 + ) + + # Get series information + series_info = self._get_definitive_series_info( + db, filters.database_name, consecutivo, linea, filters.is_shelter + ) + + # Get export symbol + symbolo_ex = self._get_part_export_symbol( + db, filters.database_name, row[36], filters.is_shelter # C50 + ) + + # Get rectification pedimento + pedimento_r1 = self._buscar_rectificacion(pedimento, row[28]) # C42 + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Create detailed movement item + movement = MovementItemDetailed( + Linea=linea, + Factura=factura, + Pedimento=pedimento, + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + Regimen=row[5], # C10 + Fecha_Inicio=row[6], # C11 + Fecha_Fin=row[7], # C12 + Fecha_Pago=row[8], # C13 + Remesa=row[9], # C14, + Proveedor=proveedor_info.get("nombre"), + RFCProveedor=proveedor_info.get("rfc"), + ProveedorTaxID=proveedor_info.get("tax_id"), + VendidoA=buyer_info.get("nombre"), + VendidoARFC=buyer_info.get("rfc"), + VendidoATaxID=buyer_info.get("tax_id"), + AgenteAduanal=broker_info.get("nombre"), + Patente=broker_info.get("patente"), + NumParte=row[14], # C20 + DescripcionE=row[15], # C21 + DescripcionI=row[16], # C22 + CantidadIE=float(row[17] or 0), # C23 + UniMed=row[18], # C24 + ValorComercialMN=valor_comercial_mn, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[23], # C31 + FraccionArancelaria=row[29], # C32 + Preferencia=row[30], # C33 + Sector=row[32], # C35 + PaisOrigen=row[33], # C37 + Aduana=aduana_nombre, + Advalorem=row[27], # C41 + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[34], # C43 + NumOperacionVU=row[35], # C44 + Series=series_info, + Marca=row[40], # C46 + Modelo=row[41], # C47 + FraccionAmericana=row[42], # C48 + ECCN=row[43], # C49 + SimboloEx=symbolo_ex, + FechaEmision=row[38], # C52 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[39], # C53 + UsuarioAcr=row[40], # C54 + Transportista=row[41], # C55 + NumCaja=row[42], # C56 + Pedimento18=row[43], # C57 + AduanaCru=row[24], # C38 + Lote=row[44] # C58 + ) + + movements.append(movement) + + logger.info(f"Successfully retrieved {len(movements)} detailed definitive movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed definitive movements: {e}", exc_info=True) + raise + + def _get_definitive_series_info( + self, + db: Session, + db_name: str, + consecutivo: int, + linea: int, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for a definitive import partida from QSeriesDef table. + Returns formatted string with series, model, and part info. + """ + if not consecutivo or not linea: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesDef + WHERE Consecutivo = :consecutivo + AND LineaImpoDef = :linea + """) + result = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() + + if not result: + return None + + series_list = [] + for idx, row in enumerate(result, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_list.append(serie_str) + + return " | ".join(series_list) if series_list else None + + except Exception as e: + logger.debug(f"Error fetching definitive series info for consecutivo {consecutivo}, linea {linea}: {e}") + return None + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """ + Retrieve repair import movements from legacy database (LLENADOIMP_REPARACION - NORMAL). + Aggregates movements by invoice number. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching repair import movements with filters: {filters.model_dump()}") + + # Get configuration + met_trans = self._get_met_trans_config() + + # Build WHERE clause + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"FimRep.FechaFactura >= '{filters.start_date}' AND FimRep.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("FimRep.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"FimRep.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"FimRep.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Discharge filter for repair imports + if filters.discharge_filter.value == "SiDes": + where_conditions.append("RepPim.Descarga = 1") + elif filters.discharge_filter.value == "NoDes": + where_conditions.append("RepPim.Descarga = 0") + # If ALL, no filter added + + # Exclude regime changes + where_conditions.append("FimRep.EsCambioRegimen <> 'S'") + + where_clause = " AND ".join(where_conditions) + + # Build main SQL query for repair imports + sql_query = text(f""" + SELECT + FimRep.FacturaImpo AS C1, + FimRep.PedimentoImpo AS C2, + FimRep.FechaFactura AS C3, + FimRep.Estatus AS C4, + EqiPed.ClavePed AS C5, + FimRep.ValorImpoME AS C6, + FimRep.ValorImpoMN AS C7, + FimRep.Proveedor AS C8, + FimRep.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + FimRep.Remesa AS C14, + FimRep.TipoCambio AS C15, + FimRep.AAduanal AS C18, + FimRep.Consecutivo AS C39, + EqiPed.PedRectifica AS C41, + FimRep.EDocument AS C42, + FimRep.NumOperacionVU AS C43, + FimRep.TipoCambio AS C49, + FimRep.FechaEmision AS C50, + FimRep.UsuarioCap AS C51, + FimRep.UsuarioAct AS C52, + FimRep.Transportista AS C53, + FimRep.Transporte + ' ' + FimRep.NumTrasporte AS C54, + EqiPed.Pedimento18 AS C55, + EqiPed.Aduana_Cruce AS C38, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C56 + FROM [{filters.database_name}].dbo.QFacImpRep FimRep + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = FimRep.PedimentoImpo + LEFT JOIN [{filters.database_name}].dbo.QEqiMaqRep RepPim + ON RepPim.Consecutivo = FimRep.Consecutivo + LEFT JOIN [{filters.database_name}].dbo.QClaAct ClaAct + ON ClaAct.Clase = RepPim.Clase + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements_dict = {} + + for row in result: + factura = row[0] # C1 + + # Use factura + IMPRE as key + tipo_mov = "IMPRE" + key = (factura, tipo_mov) + + # If already exists, skip (we only want one entry per invoice in Normal mode) + if key not in movements_dict: + consecutivo = row[16] # C39 + fecha_pago = row[12] # C13 + tipo_pedimento = row[28] # C56 + fecha_inicio = row[10] # C11 + + # Calculate total values for this invoice (with discharge filter) + valor_me, valor_mn = self._calculate_repair_totals( + db, filters.database_name, consecutivo, filters.discharge_filter.value + ) + + # Calculate exchange rate and values using unified method + valor_comercial, tipo_cambio = self._calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + valor_me=valor_me, + valor_mn=valor_mn, + tipo_cambio_db=float(row[20] or 1.0), # C49 + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=filters.use_transport_method, + met_trans=met_trans + ) + + # Get driver badge number + num_gaf_uni = self._get_driver_badge_repair(db, filters.database_name, factura) + + # Get rectification pedimento + pedimento = row[1] # C2 + ped_rectifica = row[17] # C41 + pedimento_r1 = self._buscar_rectificacion(pedimento, ped_rectifica) + + # Create movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C42 + NumOperacionVU=row[19], # C43 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C51 + UsuarioAcr=row[23], # C52 + Fecha_Pago=row[12], # C13 + NumCaja=row[25], # C54 + Pedimento18=row[26], # C55 + AduanaCru=row[27], # C38 + Lote=None # Repair imports don't have Lote in main query + ) + + movements_dict[key] = movement + + movements = list(movements_dict.values()) + logger.info(f"Successfully retrieved {len(movements)} repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching repair import movements: {e}", exc_info=True) + raise + + def _calculate_repair_totals( + self, + db: Session, + db_name: str, + consecutivo: int, + discharge_filter: str + ) -> tuple: + """ + Calculate total values for a repair import invoice. + Sums up all partidas (items) excluding sub-partidas, with optional discharge filter. + + Args: + db: Database session + db_name: Database name + consecutivo: Invoice consecutive number + discharge_filter: "SiDes", "NoDes", or "ALL" + + Returns: + tuple: (total_valor_me, total_valor_mn) + """ + try: + # Build discharge filter clause + discharge_clause = "" + if discharge_filter == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif discharge_filter == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + sql = text(f""" + SELECT SUM(RepPim.ValorImpoME), SUM(RepPim.ValorImpoMN) + FROM [{db_name}].dbo.QEqiMaqRep RepPim + WHERE RepPim.Consecutivo = :consecutivo + AND RepPim.EsSubpartida = 'P' + {discharge_clause} + """) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating repair totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_driver_badge_repair(self, db: Session, db_name: str, factura: str) -> Optional[str]: + """Get driver's unique badge number for a repair import invoice""" + if not factura: + return None + + try: + sql = text(f""" + SELECT NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImpRep + ON QFacImpRep.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for repair invoice {factura}: {e}") + return None + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed repair import movements from legacy database (LLENADOIMP_REPARACION - DETALLADO). + Returns individual partida lines with full detail. + + Args: + db: Database session + filters: Filter parameters including date range, discharge filter, etc. + + Returns: + List of detailed movement items + """ + try: + logger.info(f"Fetching detailed repair import movements with filters: {filters}") + + # Get database name + db_name = self._get_database_name(db) + if not db_name: + logger.error("Could not determine database name") + return [] + + # Get MetTrans configuration + met_trans = self._get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause_repair(filters) + + # Build discharge filter for main query + discharge_clause = "" + if filters.discharge_filter == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif filters.discharge_filter == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + # Build main SQL query with all required fields for detailed mode + sql = text(f""" + SELECT + RepPim.LineaImpo, -- C44: Linea + Rep.FacturaImpo, -- C1: Factura + Ped.PedNumero, -- C2: Pedimento + Rep.FechaFacImpo, -- C3: FechaFactura + Rep.Estatus, -- C4: Estatus + Ped.ClavePedImpo, -- C5: ClavePed + Ped.Regimen, -- C10: Regimen + Ped.FechaEntrada, -- C11: Fecha_Inicio + Ped.FechaPago, -- C13: Fecha_Pago + Rep.Remesa, -- C14: Remesa + Rep.TipoCambio, -- C15: TipoCambio (from header) + Rep.Cliente, -- C16: Cliente/Proveedor + Rep.VendidoA, -- C17: VendidoA + Rep.AgenteAduanal, -- C18: AgenteAduanal clave + RepPim.NumParteImpo, -- C20: NumParte + RepPim.DescripcionE, -- C21: DescripcionE + RepPim.DescripcionI, -- C22: DescripcionI + RepPim.CantidadImpo, -- C23: CantidadIE + RepPim.UnidadMedImpo, -- C24: UniMed + RepPim.ValorImpoMN, -- C25: ValorComercialMN (direct) + RepPim.ValorImpoME, -- C27: ValorComercialME + RepPim.PesoNetoImpo, -- C29: PesoNeto + RepPim.PesoBrutoImpo, -- C30: PesoBruto + RepPim.OrdenCompraVta, -- C31: OrdenCompraVenta + RepPim.FraccionImpo, -- C32: FraccionArancelaria + RepPim.Preferencia, -- C33: Preferencia + RepPim.Sector, -- C35: Sector + RepPim.PaisOrigenImpo, -- C37: PaisOrigen + RepPim.Aduana, -- C38: Aduana seccion + Rep.Consecutivo, -- C39: Consecutivo + RepPim.EsSubpartida, -- C40: Advalorem/EsSubpartida + Ped.PedRectifica, -- C41: PedRectifica + Rep.eDocument, -- C42: EDocument + Rep.NumOperacionVU, -- C43: NumOperacionVU + RepPim.Marca, -- C45: Marca + RepPim.Modelo, -- C46: Modelo + RepPim.FraccionAmericana, -- C47: FraccionAmericana + RepPim.ECCN, -- C48: ECCN + RepPim.TipoCambio AS TipoCambioPartida, -- C49: TipoCambio (from partida) + Rep.FechaEmbarque, -- C50: FechaEmision + Rep.UsuarioCap, -- C51: UsuarioCap + Rep.UsuarioAct, -- C52: UsuarioAcr + Rep.Transportista, -- C53: Transportista + Rep.NumCaja, -- C54: NumCaja + Ped.Pedimento18, -- C55: Pedimento18 + Ped.ClavePedImpo -- C56: ClavePedImpo (for MetTrans check) + FROM [{db_name}].dbo.QFacImpRep Rep + LEFT JOIN [{db_name}].dbo.QPedimentos Ped ON Rep.Pedimento = Ped.PedNumero + LEFT JOIN [{db_name}].dbo.QEqiMaqRep RepPim ON Rep.Consecutivo = RepPim.Consecutivo + WHERE Rep.EsCambioRegimen <> 'S' + {where_clause} + {discharge_clause} + ORDER BY Rep.FacturaImpo, RepPim.LineaImpo + """) + + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed repair import partidas") + + movements = [] + for row in results: + # Extract all fields from query + linea = row[0] + factura = row[1] + pedimento = row[2] + fecha_factura = row[3] + estatus = row[4] + clave_ped = row[5] + regimen = row[6] + fecha_inicio = row[7] + fecha_pago = row[8] + remesa = row[9] + tipo_cambio_header = row[10] + cliente = row[11] + vendido_a = row[12] + agente_aduanal_clave = row[13] + num_parte = row[14] + descripcion_e = row[15] + descripcion_i = row[16] + cantidad = row[17] + uni_med = row[18] + valor_mn_direct = row[19] + valor_me = row[20] + peso_neto = row[21] + peso_bruto = row[22] + orden_compra = row[23] + fraccion = row[24] + preferencia = row[25] + sector = row[26] + pais_origen = row[27] + aduana_seccion = row[28] + consecutivo = row[29] + es_subpartida = row[30] + ped_rectifica = row[31] + e_document = row[32] + num_operacion_vu = row[33] + marca = row[34] + modelo = row[35] + fraccion_americana = row[36] + eccn = row[37] + tipo_cambio_partida = row[38] + fecha_emision = row[39] + usuario_cap = row[40] + usuario_acr = row[41] + transportista = row[42] + num_caja = row[43] + pedimento_18 = row[44] + clave_ped_mettrans = row[45] + + # Get client/supplier information (Proveedor) + proveedor_info = self._get_client_info(db, db_name, cliente, is_supplier=True) + + # Get sold-to client information (VendidoA) + vendido_info = self._get_client_info(db, db_name, vendido_a, is_supplier=False) + + # Get customs agent information + agente_info = self._get_customs_agent_info(db, db_name, agente_aduanal_clave) + + # Get customs section name + aduana_nombre = self._get_aduana_seccion_nombre(db, db_name, aduana_seccion) + + # Calculate exchange rate and commercial value + valor_mn, tipo_cambio_final = self._calculate_exchange_rate_and_value( + db=db, + db_name=db_name, + es_subpartida=es_subpartida, + valor_me=valor_me, + valor_mn_direct=valor_mn_direct, + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + clave_ped=clave_ped_mettrans, + tipo_cambio_partida=tipo_cambio_partida, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + peso_neto_final = peso_neto if es_subpartida == 'P' else 0 + peso_bruto_final = peso_bruto if es_subpartida == 'P' else 0 + + # Get series information for this partida + series = self._get_series_info_repair(db, db_name, consecutivo, linea) + + # Get rectification pedimento + pedimento_r1 = self._buscar_rectificacion(db, db_name, pedimento, ped_rectifica) + + # Get driver badge unique number + num_gaf_uni = self._get_driver_badge_repair(db, db_name, factura) + + # Build movement item + movement = MovementItemDetailed( + linea=linea, + factura=factura, + pedimento=pedimento, + fecha_factura=fecha_factura, + estatus=estatus, + clave_ped=clave_ped, + tipo_mov_tem_def="IMPRE", + es_cambio_regimen="N", + regimen=regimen, + fecha_inicio=fecha_inicio, + fecha_fin=None, # Not available for repair imports + fecha_pago=fecha_pago, + remesa=remesa, + tipo_cambio=tipo_cambio_final, + proveedor=proveedor_info.get("nombre"), + rfc_proveedor=proveedor_info.get("rfc"), + proveedor_tax_id=proveedor_info.get("tax_id"), + vendido_a=vendido_info.get("nombre"), + vendido_a_rfc=vendido_info.get("rfc"), + vendido_a_tax_id=vendido_info.get("tax_id"), + agente_aduanal=agente_info.get("nombre"), + patente=agente_info.get("patente"), + num_parte=num_parte, + descripcion_e=self._remove_commas(descripcion_e), + descripcion_i=self._remove_commas(descripcion_i), + cantidad_ie=cantidad, + uni_med=uni_med, + valor_comercial_mn=valor_mn, + peso_neto=peso_neto_final, + peso_bruto=peso_bruto_final, + orden_compra_venta=orden_compra, + fraccion_arancelaria=fraccion, + preferencia=preferencia, + sector=sector, + pais_origen=pais_origen, + aduana=aduana_nombre, + advalorem=es_subpartida, + tipo_expo=None, + pedimento_r1=pedimento_r1, + e_document=e_document, + num_operacion_vu=num_operacion_vu, + series=series, + marca=marca, + modelo=modelo, + fraccion_americana=fraccion_americana, + eccn=eccn, + fecha_emision=fecha_emision, + base_de_datos=db_name, + num_gaf_uni=num_gaf_uni, + usuario_cap=usuario_cap, + usuario_acr=usuario_acr, + transportista=transportista, + num_caja=num_caja, + pedimento_18=pedimento_18, + aduana_cru=aduana_seccion + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed repair import movements: {e}", exc_info=True) + raise + + def _get_series_info_repair(self, db: Session, db_name: str, consecutivo: int, linea: int) -> Optional[str]: + """Get series information for repair import partida""" + if not consecutivo or not linea: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpoRep + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY Renglon + """) + results = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() + + if not results: + return None + + series_list = [] + for idx, row in enumerate(results, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_list.append(serie_str) + + return " | ".join(series_list) if series_list else None + + except Exception as e: + logger.debug(f"Error fetching repair series info for consecutivo {consecutivo}, linea {linea}: {e}") + return None + + def _build_where_clause_repair(self, filters: ImportRepairFilter) -> str: + """Build WHERE clause for repair imports query""" + conditions = [] + + # Date range filter + if filters.range_type == RangeType.INVOICE_DATE: + conditions.append(f"Rep.FechaFacImpo BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + elif filters.range_type == RangeType.PAYMENT_DATE: + conditions.append(f"Ped.FechaPago BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + elif filters.range_type == RangeType.ENTRY_DATE: + conditions.append(f"Ped.FechaEntrada BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + + return " AND " + " AND ".join(conditions) if conditions else "" + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index 24220d6d..bc21783a 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -51,6 +51,7 @@ from api.v1.modules.public.reference_data.material_types.routes import router as # --- NUEVO IMPORT PARA REPORTES DE FACTURAS --- from .reports.importacion.facturas.routes import router as invoices_reports_router from .reports.importacion.consolidados.routes import router as consolidated_reports_router +from .reports.movements.invoices.routes import router as invoice_movements_router # Router principal @@ -130,4 +131,10 @@ router.include_router( consolidated_reports_router, prefix="/a76/reports/importacion/consolidados", tags=["a76 / reports"] +) + +router.include_router( + invoice_movements_router, + prefix="/a76/reports/movements/invoices", + tags=["a76 / reports / movements"] ) \ No newline at end of file diff --git a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts new file mode 100644 index 00000000..a5b7dafe --- /dev/null +++ b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts @@ -0,0 +1,184 @@ +/** + * API Client para Reportes de Movimientos de Facturas + */ +import { api } from '$lib/api'; + +// ===== TYPES ===== + +export type RangeType = 'FF' | 'FP'; // FF = fecha factura, FP = fecha pago +export type ReportType = 'Normal' | 'Detallado'; +export type CurrencyType = 'ME' | 'MN'; // ME = moneda extranjera, MN = moneda nacional +export type ExchangeRateType = 'FP' | 'FF'; +export type MovementTypeFilter = 'COMEX' | 'IMPDF' | 'ALL'; +export type DischargeFilter = 'SiDes' | 'NoDes' | 'ALL'; +export type ExportMovementType = 'AFIJO' | 'NODES' | 'SCRAP' | 'REEXP' | 'DONAC' | 'VEMEX' | 'ALL'; + +export interface BaseFilter { + range_type: RangeType; + start_date: string; // YYYYMMDD format + end_date: string; // YYYYMMDD format + include_cancelled: boolean; + provider?: string | null; + buyer?: string | null; + pedimento_code?: string | null; + report_type: ReportType; + currency_type: CurrencyType; + exchange_rate_type: ExchangeRateType; + is_shelter: boolean; + database_name: string; +} + +export interface ImportTemporaryFilter extends BaseFilter {} + +export interface ImportDefinitiveFilter extends BaseFilter { + movement_type: MovementTypeFilter; +} + +export interface ImportRepairFilter extends BaseFilter { + discharge_filter: DischargeFilter; +} + +export interface ExportFilter extends BaseFilter { + movement_type: ExportMovementType; + discharge_filter: DischargeFilter; + use_transport_method: boolean; +} + +export interface ExportRepairFilter extends Omit { + movement_type: ExportMovementType; + discharge_filter: DischargeFilter; +} + +export interface AllMovementsFilter { + range_type: RangeType; + start_date: string; // YYYYMMDD format + end_date: string; // YYYYMMDD format + include_cancelled: boolean; + provider?: string | null; + buyer?: string | null; + pedimento_code?: string | null; + currency_type: CurrencyType; + exchange_rate_type: ExchangeRateType; + is_shelter: boolean; + operation_type?: 'imp' | 'exp' | null; +} + +export interface MovementItem { + Factura: string; + Pedimento: string; + FechaFactura: string | null; + Estatus: string; + ClavePed: string; + TipoMovTemDef: string; + EsCambioRegimen: string; + ValorMPTemp: number; + ValorComercialMN: number; + TipoCambio: number; + ValorAgre: number; + TipoExpo: string; + PedimentoR1: string | null; + EDocument: string | null; + NumOperacionVU: string | null; + BaseDeDatos: string; + NumGafUni: string | null; + UsuarioCap: string | null; + UsuarioAcr: string | null; + Fecha_Pago: string | null; + NumCaja: string | null; + Pedimento18: string | null; + AduanaCru: string | null; + Lote: string | null; +} + +export interface MovementItemDetailed extends MovementItem { + Linea: number; + Regimen: string | null; + Fecha_Inicio: string | null; + Fecha_Fin: string | null; + Remesa: string | null; + Proveedor: string | null; + RFCProveedor: string | null; + ProveedorTaxID: string | null; + VendidoA: string | null; + VendidoARFC: string | null; + VendidoATaxID: string | null; + AgenteAduanal: string | null; + Patente: string | null; + NumParte: string | null; + DescripcionE: string | null; + DescripcionI: string | null; + CantidadIE: number; + UniMed: string | null; + PesoNeto: number; + PesoBruto: number; + OrdenCompraVenta: string | null; + FraccionArancelaria: string | null; + Preferencia: string | null; + Sector: string | null; + PaisOrigen: string | null; + Aduana: string | null; + Advalorem: string | null; + Series: string | null; + Marca: string | null; + Modelo: string | null; + FraccionAmericana: string | null; + ECCN: string | null; + SimboloEx: string | null; + FechaEmision: string | null; + Transportista: string | null; +} + +// ===== API METHODS ===== + +export const invoiceMovementsApi = { + // Temporary Imports + getTemporaryImports: (filters: ImportTemporaryFilter) => + api.post('/v1/a76/reports/movements/invoices/temporary', filters), + + getTemporaryImportsDetailed: (filters: ImportTemporaryFilter) => + api.post( + '/v1/a76/reports/movements/invoices/temporary-detailed', + filters + ), + + // Definitive Imports + getDefinitiveImports: (filters: ImportDefinitiveFilter) => + api.post('/v1/a76/reports/movements/invoices/definitive', filters), + + getDefinitiveImportsDetailed: (filters: ImportDefinitiveFilter) => + api.post( + '/v1/a76/reports/movements/invoices/definitive-detailed', + filters + ), + + // Repair Imports + getRepairImports: (filters: ImportRepairFilter) => + api.post('/v1/a76/reports/movements/invoices/repair', filters), + + getRepairImportsDetailed: (filters: ImportRepairFilter) => + api.post( + '/v1/a76/reports/movements/invoices/repair-detailed', + filters + ), + + // Exports + getExports: (filters: ExportFilter) => + api.post('/v1/a76/reports/movements/invoices/export', filters), + + getExportsDetailed: (filters: ExportFilter) => + api.post('/v1/a76/reports/movements/invoices/export-detailed', filters), + + // Export Repairs + getExportRepairs: (filters: ExportRepairFilter) => + api.post('/v1/a76/reports/movements/invoices/export-repair', filters), + + getExportRepairsDetailed: (filters: ExportRepairFilter) => + api.post( + '/v1/a76/reports/movements/invoices/export-repair-detailed', + filters + ), + + // All Movements + getAllMovements: (filters: AllMovementsFilter) => + api.post('/v1/a76/reports/movements/invoices/all', filters) +}; diff --git a/frontend/src/lib/components/sidebar/modules.ts b/frontend/src/lib/components/sidebar/modules.ts index e6dbde48..17421dc6 100644 --- a/frontend/src/lib/components/sidebar/modules.ts +++ b/frontend/src/lib/components/sidebar/modules.ts @@ -5,6 +5,7 @@ import { BadgeCheck, ChartPie, Database, + FileSearch, FileText, Frame, GalleryVerticalEnd, @@ -384,6 +385,17 @@ export function getSidebarData(): SidebarData { icon: BadgeCheck, items: [], }, + { + title: "Reportes", + url: "#", + icon: FileSearch, + items: [ + { + title: "Facturas Impo/Expo", + url: "/dashboard/reports/invoices", + }, + ], + }, { title: m["sidebar.reference_data.configuracion"](), url: "#", diff --git a/frontend/src/lib/components/ui/icons/FolderIcon.svelte b/frontend/src/lib/components/ui/icons/FolderIcon.svelte new file mode 100644 index 00000000..beada7c8 --- /dev/null +++ b/frontend/src/lib/components/ui/icons/FolderIcon.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/frontend/src/routes/dashboard/+layout.svelte b/frontend/src/routes/dashboard/+layout.svelte index 60b5d95c..13ca79ea 100644 --- a/frontend/src/routes/dashboard/+layout.svelte +++ b/frontend/src/routes/dashboard/+layout.svelte @@ -57,7 +57,7 @@
- {@render children()} + {@render children?.()}
diff --git a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte index 30b1ecd6..248805b0 100644 --- a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte @@ -203,7 +203,7 @@ } catch (e: any) { console.error(e); error = e.message || "Error al guardar"; - toast.error(error); + toast.error(error || "Error al guardar"); } finally { loading = false; } diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.server.ts b/frontend/src/routes/dashboard/reports/invoices/+page.server.ts new file mode 100644 index 00000000..d86c1b74 --- /dev/null +++ b/frontend/src/routes/dashboard/reports/invoices/+page.server.ts @@ -0,0 +1,15 @@ +import type { PageServerLoad } from './$types'; +import { redirect } from '@sveltejs/kit'; +import { getAuthTokens } from '$lib/server/api'; + +export const load: PageServerLoad = async ({ cookies }) => { + const { accessToken } = getAuthTokens(cookies); + + if (!accessToken) { + throw redirect(302, '/login'); + } + + return { + title: 'Reportes de Facturas' + }; +}; diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte new file mode 100644 index 00000000..b2060ede --- /dev/null +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -0,0 +1,1394 @@ + + +
+ + +
+
+

+ + Reporte de Facturas +

+ + V2.0 + +
+
+ Sistema Fiscal +
+
+ + + + +
+ {#each menuOptions as item} + {#if item.items.length > 0} + + + {#snippet child({ props })} + + {/snippet} + + + {item.label} + +
+ {#each item.items as subItem} + toast.info(`Seleccionado: ${subItem}`)}> + {subItem} + + {/each} +
+
+
+ {:else} + + {/if} + {/each} +
+ + + + +
+ + + + + + Periodo y Clasificación + + + +
+
+ + +
+
+ + +
+
+ + + +
+ +
+ +
+ {#each Object.keys(types.import) as key} +
+ + +
+ {/each} +
+
+ + +
+ +
+ {#each Object.keys(types.other) as key} +
+ { if (key === 'TODAS') handleTodasChange(v as boolean); }} + /> + +
+ {/each} +
+
+
+ + +
+ + +
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ +
+ {#each Object.keys(types.export.additional) as key} +
+ + +
+ {/each} +
+
+
+
+
+
+ + + + + + Filtros e Identificadores + + + +
+ {#each [ + { label: 'Proveedor', key: 'provider' as const }, + { label: 'Vendido a', key: 'soldTo' as const }, + { label: 'Clave de Pedimento', key: 'pedimentoKey' as const } + ] as item} +
+ +
+ + +
+
+ {/each} +
+ +
+ +
+ +
+ + +
+ + +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + + + + + Configuración Final + + + + +
+
+ + +
+ + +
+
+ + +
+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+ +
+
+ + +
+ + +
+
+ + +
+
+
+
+ + +
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ + + + +
+
+ + + { if (!v) showResults = false; }}> + + +
+
+ + + {reportTitle} + + + {results.length} registros encontrados • {currencyLabel} + +
+
+ + + + Cerrar + +
+
+
+ +
+
+ + + + {#each (config.reportType === 'normal' ? + ['PEDIMENTO', 'CLAVE', 'FACTURA', 'FECHA FACT', 'VALOR COM.', 'TIPO OPER.', 'ESTATUS', 'PROYECTO'] : + ['PEDIMENTO', 'FACTURA', 'FECHA FACT', 'PROVEEDOR', 'CLIENTE', 'CANTIDAD', 'DESC. ESPAÑOL', 'TIPO OPER.']) as header} + + {/each} + + + + {#each results as row} + + {#if config.reportType === 'normal'} + + + + + + + + + {:else} + {@const detailRow = row as MovementItemDetailed} + + + + + + + + + {/if} + + {/each} + +
+ {header} +
{row.Pedimento || '-'}{row.ClavePed || '-'}{row.Factura}{formatDateFromYYYYMMDD(row.FechaFactura)}${row.ValorComercialMN} + + {row.TipoMovTemDef} + + + + {row.Estatus || 'A'} + + {row.BaseDeDatos}{detailRow.Pedimento || '-'}{detailRow.Factura}{formatDateFromYYYYMMDD(detailRow.FechaFactura)}{detailRow.Proveedor || '-'}{detailRow.VendidoA || '-'}{detailRow.CantidadIE || '0'}{detailRow.DescripcionE || '-'} + + {detailRow.TipoMovTemDef} + +
+
+
+
+
+
+ + + + + + + Seleccionar {dialogType === 'pedimentoKey' ? 'Clave de Pedimento' : dialogType === 'provider' ? 'Proveedor' : 'Cliente'} + + + Busca y selecciona {dialogType === 'pedimentoKey' ? 'una clave de pedimento' : dialogType === 'provider' ? 'un proveedor' : 'un cliente'} de la lista + + + +
+
+ + +
+ +
+ {#if dialogType === 'pedimentoKey'} + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)}> + + + + + {/each} + {/if} + +
CódigoDescripciónAcción
+ No se encontraron resultados +
{item.code || '-'}{item.description || '-'} + +
+ {:else} + + + + + + + + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)}> + + + + + + + + + + + + {/each} + {/if} + +
ClaveNombreTipoRFCCallesNúm. ExtCPColoniaCiudadAcción
+ No se encontraron resultados +
{item.id || '-'}{item.name || '-'} + + {item.client_or_provider === 'provider' ? 'P' : + item.client_or_provider === 'client' ? 'C' : + 'A'} + + {item.rfc || '-'}{item.address?.streets || '-'}{item.address?.exterior_number || '-'}{item.address?.postal_code || '-'}{item.address?.neighborhood || '-'}{item.address?.city || '-'} + +
+ {/if} +
+
+ + + + +
+
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 47270527..00000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,157 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - lucide-svelte: - specifier: ^0.552.0 - version: 0.552.0(svelte@5.43.2) - -packages: - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@sveltejs/acorn-typescript@1.0.6': - resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} - peerDependencies: - acorn: ^8.9.0 - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - esm-env@1.2.2: - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - - esrap@2.1.2: - resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} - - is-reference@3.0.3: - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - - lucide-svelte@0.552.0: - resolution: {integrity: sha512-zynJ64KOsuQG3I4tSqfvvl7Kc9x4mWkppbxsuyrbegQwma9HFhBp4aE6HuQNF4c3pS0AHWHki5CAMs5m3QXA5w==} - peerDependencies: - svelte: ^3 || ^4 || ^5.0.0-next.42 - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - svelte@5.43.2: - resolution: {integrity: sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==} - engines: {node: '>=18'} - - zimmerframe@1.1.4: - resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - -snapshots: - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': - dependencies: - acorn: 8.15.0 - - '@types/estree@1.0.8': {} - - acorn@8.15.0: {} - - aria-query@5.3.2: {} - - axobject-query@4.1.0: {} - - clsx@2.1.1: {} - - esm-env@1.2.2: {} - - esrap@2.1.2: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - is-reference@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - locate-character@3.0.0: {} - - lucide-svelte@0.552.0(svelte@5.43.2): - dependencies: - svelte: 5.43.2 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - svelte@5.43.2: - dependencies: - '@jridgewell/remapping': 2.3.5 - '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@types/estree': 1.0.8 - acorn: 8.15.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - clsx: 2.1.1 - esm-env: 1.2.2 - esrap: 2.1.2 - is-reference: 3.0.3 - locate-character: 3.0.0 - magic-string: 0.30.21 - zimmerframe: 1.1.4 - - zimmerframe@1.1.4: {} From 461f8ececbdfbe772d5f6405153dcd91052cda0d Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 30 Jan 2026 18:03:41 -0600 Subject: [PATCH 05/54] fix: update invoice type filtering for repair imports and exports --- .../invoices/services/export_repair.py | 2 +- .../invoices/services/query_builders.py | 92 +++++---------- .../movements/invoices/services/repair.py | 8 +- .../dashboard/reports/invoices/+page.svelte | 106 ++++++++++++------ 4 files changed, 104 insertions(+), 104 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 51044161..13143ef6 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -337,7 +337,7 @@ class ExportRepairService: # ALL mode: bring all exports without filtering by specific invoice_type pass else: - where_conditions.append("ih.invoice_type IN ('EXREP', 'MATEXREP')") + where_conditions.append("ih.invoice_type = 'REPAR'") # Date range filter if filters.range_type.value == "FF": diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index d141392c..7e6417c1 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -41,26 +41,17 @@ class TemporaryImportQueries: '' AS C56, '' AS C57, '' AS C58, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 - LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id - LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id WHERE ih.operation_type = 'imp' AND ih.invoice_type = 'TEM' AND {where_str} - GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, - log.entry_exit_date, log.delivery_date, log.payment_date, cmp.remesa, fin.exchange_rate, - cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, cmp.aduana, ped_r1.pedimento_number, - cmp.edocument, cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, - log.carrier_id, log.transport_num, log.license_plate ORDER BY ih.invoice_number """ @@ -133,9 +124,8 @@ class TemporaryImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.item_lines il ON il.item_id = ( - SELECT id FROM a76.items WHERE invoice_id = ih.id LIMIT 1 - ) + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id @@ -146,6 +136,7 @@ class TemporaryImportQueries: WHERE ih.operation_type = 'imp' AND ih.invoice_type = 'TEM' AND {where_str} + ORDER BY ih.invoice_number, il.line_number """ @staticmethod @@ -219,27 +210,17 @@ class DefinitiveImportQueries: '' AS C57, '' AS C58, '' AS C59, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 - LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id - LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id WHERE ih.operation_type = 'imp' AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') AND {where_clause} - GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, - log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, - fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, - ih.purchase_order, cmp.aduana, ped_r1.pedimento_number, cmp.edocument, - cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, - log.transport_id, log.transport_num ORDER BY ih.invoice_number """ @@ -355,7 +336,12 @@ class DefinitiveImportQueries: class RepairImportQueries: - """SQL queries for repair imports (PostgreSQL schema).""" + """SQL queries for repair imports (PostgreSQL schema). + + Note: Repair imports are NOT identified by invoice_type, but by having + cross-references (search_invoice field) that link them to export invoices. + These are regular import invoices (TEM, DEF, etc.) that were imported for repair. + """ @staticmethod def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: @@ -387,27 +373,23 @@ class RepairImportQueries: COALESCE(log.carrier_id, '') AS C44, COALESCE(log.transport_num, '') AS C45, COALESCE(ped.pedimento_code, '') AS C47, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id - LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id WHERE ih.operation_type = 'imp' - AND ih.invoice_type = 'REP' AND COALESCE(cmp.is_regime_change, false) = false + AND EXISTS ( + SELECT 1 FROM a76.item_lines il2 + INNER JOIN a24.fa_item_lines fil2 ON fil2.id = il2.id + WHERE il2.item_id = i.id AND fil2.search_invoice IS NOT NULL + ) {"AND " + where_str if where_str else ""} {discharge_filter} - GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, - log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, - cmp.customs_broker_id, ih.purchase_order, ped.customs_office, cmp.edocument, - cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, - log.carrier_id, log.transport_num ORDER BY ih.invoice_number """ @@ -476,11 +458,12 @@ class RepairImportQueries: LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id LEFT JOIN a76.parts prt ON prt.id = il.part_number LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE ih.operation_type = 'imp' - AND ih.invoice_type = 'REP' AND COALESCE(cmp.is_regime_change, false) = false + AND fil.search_invoice IS NOT NULL {"AND " + where_str if where_str else ""} {discharge_filter} ORDER BY ih.invoice_number, il.line_number @@ -562,24 +545,14 @@ class ExportQueries: COALESCE(ih.capture_user, '') AS C50, COALESCE(ih.who_updated, '') AS C51, COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id - LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id WHERE {where_clause} - GROUP BY ih.id, ih.invoice_number, ih.is_updated, ped.pedimento_number, ped.pedimento_code, ped.regime, - log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, - cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, ih.purchase_order, cmp.aduana, - ih.invoice_type, cmp.edocument, cmp.vucem_operation_num, fin.exchange_rate, - ih.emission_date, ih.capture_user, ih.who_updated, log.transport_id, log.transport_num, - ih.invoice_date ORDER BY ih.invoice_number """ @@ -736,25 +709,16 @@ class ExportRepairQueries: COALESCE(ih.who_updated, '') AS C51, COALESCE(log.carrier_id, '') AS C52, COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, - COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id - LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id WHERE ih.operation_type = 'exp' - AND ih.invoice_type = 'REP' + AND ih.invoice_type = 'REPAR' {"AND " + where_str if where_str else ""} - GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, - log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, - cmp.customs_broker_id, ih.purchase_order, ped.customs_office, ih.document_type, - cmp.edocument, cmp.vucem_operation_num, ih.invoice_date, ih.capture_user, - ih.who_updated, log.carrier_id, log.transport_id, log.transport_num ORDER BY ih.invoice_number """ @@ -837,7 +801,7 @@ class ExportRepairQueries: LEFT JOIN a76.parts prt ON prt.id = il.part_number LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') - AND UPPER(ih.invoice_type) IN ('DEF', 'REP', 'EXDEF', 'MATDE') + AND UPPER(ih.invoice_type) IN ('DEF', 'REPAR', 'EXDEF', 'MATDE') AND {where_str} ORDER BY ih.invoice_number, il.line_number """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index 0a4619ab..889d3185 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -331,12 +331,8 @@ class RepairImportService: # STRICT SEPARATION: Only imports for repair where_conditions.append("ih.operation_type = 'imp'") - # GOLDEN RULE: If coming from /all, only filter by operation_type - if hasattr(filters, 'discharge_filter') and filters.discharge_filter == 'ALL': - # ALL mode: bring all imports without filtering by specific invoice_type - pass - else: - where_conditions.append("ih.invoice_type IN ('REP', 'MATREP')") + # Repair imports are identified by cross-references, not invoice_type + where_conditions.append("COALESCE(cmp.is_regime_change, false) = false") # Date range filter if filters.range_type.value == "FF": diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte index b2060ede..a1f33b08 100644 --- a/frontend/src/routes/dashboard/reports/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -83,7 +83,6 @@ let filters = $state({ includeNA: false, - includePartial: false, downloaded: 'all' as 'all' | 'downloaded' | 'not_downloaded' }); @@ -291,30 +290,6 @@ return { valid: true }; } - function getSelectedMovementTypes(): string[] { - const selected: string[] = []; - - // Imports - if (types.import.TEM) selected.push('IMTEM'); - if (types.import.DEF) selected.push('IMPDF'); - if (types.import.REP) selected.push('IMPRE'); - - // Exports - if (types.export.main.DEF || types.export.additional.TODAS) selected.push('EXPO_DEF'); - if (types.export.main.REP || types.export.additional.TODAS) selected.push('EXPO_REP'); - if (types.export.additional.AFIJO) selected.push('AFIJO'); - if (types.export.additional.REEXP) selected.push('REEXP'); - if (types.export.additional.NODES) selected.push('NODES'); - if (types.export.additional.DONAC) selected.push('DONAC'); - if (types.export.additional.SCRAP) selected.push('SCRAP'); - - // Others - if (types.other.VEMEX) selected.push('VEMEX'); - if (types.other.COMEX) selected.push('COMEX'); - - return selected; - } - // --- LÓGICA --- async function handleGenerateReport() { @@ -408,7 +383,7 @@ if (response.data) allResults.push(...response.data); } - // Importaciones Definitivas (IMPDF) + // Importaciones Definitivas (IMPDF) o COMEX if (types.import.DEF) { toast.info('Obteniendo importaciones definitivas...'); const movementType = types.other.COMEX ? 'COMEX' : 'IMPDF'; @@ -416,12 +391,12 @@ ? await invoiceMovementsApi.getDefinitiveImports({ ...baseFilter, database_name: 'default', - movement_type: movementType === 'COMEX' ? 'COMEX' : 'IMPDF' + movement_type: movementType }) : await invoiceMovementsApi.getDefinitiveImportsDetailed({ ...baseFilter, database_name: 'default', - movement_type: movementType === 'COMEX' ? 'COMEX' : 'IMPDF' + movement_type: movementType }); if (response.data) allResults.push(...response.data); } @@ -445,10 +420,11 @@ if (response.data) allResults.push(...response.data); } - // Exportaciones Definitivas - if (types.export.main.DEF || types.export.additional.TODAS || Object.values(types.export.additional).some(v => v)) { + // Exportaciones Definitivas (incluye VEMEX) + if (types.export.main.DEF || types.other.VEMEX || types.export.additional.TODAS || Object.values(types.export.additional).some(v => v)) { toast.info('Obteniendo exportaciones...'); + // Determinar tipo de movimiento basado en checkboxes adicionales let movementType: any = 'ALL'; if (types.export.additional.AFIJO) movementType = 'AFIJO'; else if (types.export.additional.NODES) movementType = 'NODES'; @@ -466,7 +442,7 @@ database_name: 'default', movement_type: movementType, discharge_filter: dischargeFilter, - use_transport_method: false // Por defecto, ajustar según necesidad + use_transport_method: false }) : await invoiceMovementsApi.getExportsDetailed({ ...baseFilter, @@ -482,6 +458,7 @@ if (types.export.main.REP || types.export.additional.TODAS) { toast.info('Obteniendo exportaciones de reparación...'); + // Para reparaciones solo aplican AFIJO y NODES let movementType: any = 'ALL'; if (types.export.additional.AFIJO) movementType = 'AFIJO'; else if (types.export.additional.NODES) movementType = 'NODES'; @@ -505,6 +482,61 @@ if (response.data) allResults.push(...response.data); } + // Cambio de Régimen (CREG) - Exportaciones con cambio de régimen + if (types.export.main.CREG) { + toast.info('Obteniendo cambios de régimen...'); + + // Para cambio de régimen solo aplican AFIJO y SCRAP + let movementType: any = 'ALL'; + if (types.export.additional.AFIJO) movementType = 'AFIJO'; + else if (types.export.additional.SCRAP) movementType = 'SCRAP'; + + const dischargeFilter = filters.downloaded === 'downloaded' ? 'SiDes' : + filters.downloaded === 'not_downloaded' ? 'NoDes' : 'ALL'; + + const response = config.reportType === 'normal' + ? await invoiceMovementsApi.getExports({ + ...baseFilter, + database_name: 'default', + movement_type: movementType, + discharge_filter: dischargeFilter, + use_transport_method: false + }) + : await invoiceMovementsApi.getExportsDetailed({ + ...baseFilter, + database_name: 'default', + movement_type: movementType, + discharge_filter: dischargeFilter, + use_transport_method: false + }); + if (response.data) allResults.push(...response.data); + } + + // CREGEXP (Cambio Régimen Export) - Caso especial + if (types.other.CREGEXP) { + toast.info('Obteniendo cambios de régimen export...'); + + const dischargeFilter = filters.downloaded === 'downloaded' ? 'SiDes' : + filters.downloaded === 'not_downloaded' ? 'NoDes' : 'ALL'; + + const response = config.reportType === 'normal' + ? await invoiceMovementsApi.getExports({ + ...baseFilter, + database_name: 'default', + movement_type: 'ALL', + discharge_filter: dischargeFilter, + use_transport_method: false + }) + : await invoiceMovementsApi.getExportsDetailed({ + ...baseFilter, + database_name: 'default', + movement_type: 'ALL', + discharge_filter: dischargeFilter, + use_transport_method: false + }); + if (response.data) allResults.push(...response.data); + } + results = allResults; showResults = true; @@ -760,6 +792,14 @@ return dateStr; } + function formatCurrency(value: number | null | undefined): string { + if (value === null || value === undefined) return '-'; + return new Intl.NumberFormat('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(value); + } + function handleClose() { // Reset form instead of navigating back showResults = false; @@ -938,7 +978,7 @@ bind:checked={types.import[key as keyof typeof types.import]} /> {/each} @@ -1237,7 +1277,7 @@ {row.ClavePed || '-'} {row.Factura} {formatDateFromYYYYMMDD(row.FechaFactura)} - ${row.ValorComercialMN} + ${formatCurrency(row.ValorComercialMN)} {row.TipoMovTemDef} From 5bf757e08d5284d771aadba6edb6965aa61efced Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 3 Feb 2026 09:20:24 -0600 Subject: [PATCH 06/54] fix: update date handling to convert ISO datetime to YYYY-MM-DD format --- .../pedimentos/edit/[id]/+page.svelte | 64 +++++++++---------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte b/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte index 1138594e..39107639 100644 --- a/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte +++ b/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte @@ -319,44 +319,42 @@ exchange_rate: generalFormData?.exchange_rate || undefined }; - // Helper function para convertir fecha YYYY-MM-DD a ISO datetime - function dateToISO(dateString: string | null | undefined): string | null { - if (!dateString) return null; - // Si ya tiene formato ISO completo, retornarlo - if (dateString.includes('T')) return dateString; - // Si es solo fecha (YYYY-MM-DD), agregar tiempo medianoche - return `${dateString}T00:00:00`; + // Helper function para convertir ISO datetime a YYYY-MM-DD + function isoToDate(isoString: string | null | undefined): string | null { + if (!isoString) return null; + // Extraer solo la parte de fecha (YYYY-MM-DD) + return isoString.split('T')[0]; } // Fechas - enviar si hay al menos un campo con valor if (generalFormData) { - const hasDatesValue = generalFormData.entry_date || generalFormData.pedimento_date || - generalFormData.extraction_date || generalFormData.rectification_payment_date || - generalFormData.original_date || generalFormData.payment_date || generalFormData.end_date; - if (hasDatesValue) { - payload.pedimento_dates = { - entry_date: generalFormData.entry_date || null, - pedimento_date: generalFormData.pedimento_date || null, - payment_date: generalFormData.payment_date || null, - rectification_payment_date: generalFormData.rectification_payment_date || null, - extraction_date: generalFormData.extraction_date || null, - original_date: generalFormData.original_date || null, - end_date: generalFormData.end_date || null - }; - } - } + const hasDatesValue = generalFormData.entry_date || generalFormData.pedimento_date || + generalFormData.extraction_date || generalFormData.rectification_payment_date || + generalFormData.original_date || generalFormData.payment_date || generalFormData.end_date; + if (hasDatesValue) { + payload.pedimento_dates = { + entry_date: isoToDate(generalFormData.entry_date), + pedimento_date: isoToDate(generalFormData.pedimento_date), + payment_date: isoToDate(generalFormData.payment_date), + rectification_payment_date: isoToDate(generalFormData.rectification_payment_date), + extraction_date: isoToDate(generalFormData.extraction_date), + original_date: isoToDate(generalFormData.original_date), + end_date: isoToDate(generalFormData.end_date) + }; + } + } - // Solo agregar sub-recursos en modo UPDATE (no en CREATE) - // Y solo si tienen valores reales (no enviar objetos vacíos/null) - - // Observaciones - siempre enviar (puede ser string vacío para borrar) - payload.observations = observacionesFormData?.observaciones || ''; - - // Incrementables - solo enviar si hay al menos un campo con valor - if (generalFormData) { - const hasIncrementablesValue = generalFormData.valor_seguro || generalFormData.embalajes || - generalFormData.fletes || generalFormData.deducibles || generalFormData.moneda_incrementables || - generalFormData.no_afectar_valor_dolares_inc !== undefined || generalFormData.no_afectar_valor_aduana !== undefined; + // Solo agregar sub-recursos en modo UPDATE (no en CREATE) + // Y solo si tienen valores reales (no enviar objetos vacíos/null) + + // Observaciones - siempre enviar (puede ser string vacío para borrar) + payload.observations = observacionesFormData?.observaciones || ''; + + // Incrementables - solo enviar si hay al menos un campo con valor + if (generalFormData) { + const hasIncrementablesValue = generalFormData.valor_seguro || generalFormData.embalajes || + generalFormData.fletes || generalFormData.deducibles || generalFormData.moneda_incrementables || + generalFormData.no_afectar_valor_dolares_inc !== undefined || generalFormData.no_afectar_valor_aduana !== undefined; if (hasIncrementablesValue) { payload.pedimento_incrementables = { insured_value: generalFormData.valor_seguro || null, From e7971d0d1d9cfdbd1b5e1a9f9b17a4bbdc1f4796 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 3 Feb 2026 10:38:36 -0600 Subject: [PATCH 07/54] refactor: optimize provider and client information retrieval in invoice services --- .../movements/invoices/services/definitive.py | 21 ++++++--------- .../movements/invoices/services/export.py | 21 ++++++--------- .../invoices/services/export_repair.py | 23 ++++++---------- .../invoices/services/query_builders.py | 27 ++++++++++++------- .../movements/invoices/services/repair.py | 25 +++++++---------- .../movements/invoices/services/temporary.py | 23 ++++++---------- 6 files changed, 60 insertions(+), 80 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py index 5a2c1ee3..ee2f603e 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -186,13 +186,8 @@ class DefinitiveImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Get all detailed information (same as temporary imports) - proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[15], is_supplier=True - ) - vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[16], is_supplier=False - ) + # Provider and client names now come directly from query (C8, C9) + # No need for additional database lookups agente_info = DatabaseHelper.get_customs_agent_info( db, filters.database_name, row[17] ) @@ -256,12 +251,12 @@ class DefinitiveImportService: Fecha_Fin=row[11], Fecha_Pago=row[12], Remesa=row[13], - Proveedor=proveedor_info.get('name'), - RFCProveedor=proveedor_info.get('rfc'), - ProveedorTaxID=proveedor_info.get('tax_id'), - VendidoA=vendido_info.get('name'), - VendidoARFC=vendido_info.get('rfc'), - VendidoATaxID=vendido_info.get('tax_id'), + Proveedor=row[7], # C8 - Provider name (from JOIN) + RFCProveedor=None, # RFC not in detailed query + ProveedorTaxID=None, # Tax ID not in detailed query + VendidoA=row[8], # C9 - Client name (from JOIN) + VendidoARFC=None, # RFC not in detailed query + VendidoATaxID=None, # Tax ID not in detailed query AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[19], diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index cfb594f7..d7513f1f 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -187,13 +187,8 @@ class ExportService: if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus continue - # Get client/supplier information - proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor - ) - vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA - ) + # Provider and client names now come directly from query (C14, C15) + # No need for additional database lookups # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( @@ -257,12 +252,12 @@ class ExportService: Fecha_Pago=row[10], # C11 - Fecha_Pago Remesa=row[11], # C12 - Remesa TipoCambio=tipo_cambio_final, - Proveedor=proveedor_info.get("name"), - RFCProveedor=proveedor_info.get("rfc"), - ProveedorTaxID=proveedor_info.get("tax_id"), - VendidoA=vendido_info.get("name"), - VendidoARFC=vendido_info.get("rfc"), - VendidoATaxID=vendido_info.get("tax_id"), + Proveedor=row[13], # C14 - Provider name (from JOIN) + RFCProveedor=None, # RFC not in detailed query + ProveedorTaxID=None, # Tax ID not in detailed query + VendidoA=row[14], # C15 - Client name (from JOIN) + VendidoARFC=None, # RFC not in detailed query + VendidoATaxID=None, # Tax ID not in detailed query AgenteAduanal=agente_info.get("name"), Patente=agente_info.get("license"), NumParte=row[17], # C18 - Clase diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 13143ef6..c3b7f088 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -188,15 +188,8 @@ class ExportRepairService: if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus continue - # Get provider information - proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor - ) - - # Get buyer information - vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA - ) + # Provider and client names now come directly from query (C14, C15) + # No need for additional database lookups # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( @@ -271,12 +264,12 @@ class ExportRepairService: Fecha_Fin=row[9], # C10 - Fecha_Fin Fecha_Pago=row[10], # C11 - Fecha_Pago Remesa=row[11], # C12 - Remesa - Proveedor=proveedor_info.get('name'), - RFCProveedor=proveedor_info.get('rfc'), - ProveedorTaxID=proveedor_info.get('tax_id'), - VendidoA=vendido_info.get('name'), - VendidoARFC=vendido_info.get('rfc'), - VendidoATaxID=vendido_info.get('tax_id'), + Proveedor=row[13], # C14 - Provider name (from JOIN) + RFCProveedor=None, # RFC not in detailed query + ProveedorTaxID=None, # Tax ID not in detailed query + VendidoA=row[14], # C15 - Client name (from JOIN) + VendidoARFC=None, # RFC not in detailed query + VendidoATaxID=None, # Tax ID not in detailed query AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[17], # C18 - Clase (NumParte) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index 7e6417c1..4851aebf 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -68,8 +68,8 @@ class TemporaryImportQueries: COALESCE(ped.pedimento_code, '') AS C5, COALESCE(fin.value_me, 0) AS C6, COALESCE(fin.value_mn, 0) AS C7, - COALESCE(cmp.provider_id::text, '') AS C8, - COALESCE(cmp.sold_to_id::text, '') AS C9, + COALESCE(prov.name, '') AS C8, + COALESCE(client.name, '') AS C9, COALESCE(ped.regime, '') AS C10, COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, @@ -124,6 +124,8 @@ class TemporaryImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items i ON i.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = i.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -233,7 +235,10 @@ class DefinitiveImportQueries: ih.invoice_date AS C3, -- [2] ped.status AS C4, -- [3] ped.pedimento_code AS C5, -- [4] - '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] + '' AS C6, -- [5] + '' AS C7, -- [6] + COALESCE(prov.name, '') AS C8, -- [7] Provider name + COALESCE(client.name, '') AS C9, -- [8] Client name ped.regime AS C10, -- [9] log.entry_exit_date AS C11, -- [10] log.delivery_date AS C12, -- [11] @@ -412,8 +417,8 @@ class RepairImportQueries: COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), COALESCE(cmp.remesa::text, ''), COALESCE(fin.exchange_rate, 0), - COALESCE(cmp.provider_id::text, ''), - COALESCE(cmp.sold_to_id::text, ''), + COALESCE(prov.name, ''), + COALESCE(client.name, ''), COALESCE(cmp.customs_broker_id::text, ''), COALESCE(il.part_number::text, ''), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), @@ -452,6 +457,8 @@ class RepairImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -573,8 +580,8 @@ class ExportQueries: log.payment_date AS C11, -- [10] log.payment_receipt_num AS C12, -- [11] '' AS C13, -- [12] - cmp.provider_id AS C14, -- [13] - cmp.sold_to_id AS C15, -- [14] + COALESCE(prov.name, '') AS C14, -- [13] Provider name + COALESCE(client.name, '') AS C15, -- [14] Client name cmp.customs_broker_id AS C16, -- [15] '' AS C17, -- [16] prt.part_number AS C18, -- [17] @@ -740,8 +747,8 @@ class ExportRepairQueries: COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, COALESCE(cmp.remesa::text, '') AS C12, COALESCE(fin.exchange_rate, 0) AS C13, - COALESCE(cmp.provider_id::text, '') AS C14, - COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(prov.name, '') AS C14, + COALESCE(client.name, '') AS C15, COALESCE(cmp.customs_broker_id::text, '') AS C16, '' AS C17, COALESCE(cls.class_code, '') AS C18, @@ -791,6 +798,8 @@ class ExportRepairQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index 889d3185..26ceb14f 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -200,13 +200,8 @@ class RepairImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Get all detailed information - proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[15], is_supplier=True - ) - vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[16], is_supplier=False - ) + # Provider and client names now come directly from query + # No need for additional database lookups agente_info = DatabaseHelper.get_customs_agent_info( db, filters.database_name, row[17] ) @@ -268,14 +263,14 @@ class RepairImportService: Regimen=row[9], Fecha_Inicio=row[10], Fecha_Fin=row[11], - Fecha_Pago=row[12], - Remesa=row[13], - Proveedor=proveedor_info.get('name'), - RFCProveedor=proveedor_info.get('rfc'), - ProveedorTaxID=proveedor_info.get('tax_id'), - VendidoA=vendido_info.get('name'), - VendidoARFC=vendido_info.get('rfc'), - VendidoATaxID=vendido_info.get('tax_id'), + Fecha_Pago=row[8], + Remesa=row[9], + Proveedor=row[11], # Provider name (from JOIN) + RFCProveedor=None, # RFC not in detailed query + ProveedorTaxID=None, # Tax ID not in detailed query + VendidoA=row[12], # Client name (from JOIN) + VendidoARFC=None, # RFC not in detailed query + VendidoATaxID=None, # Tax ID not in detailed query AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[19], diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index 1e4ae9b2..b4d1ea2c 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -190,15 +190,8 @@ class TemporaryImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Get provider information - proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[15], is_supplier=True # C16 - Proveedor - ) - - # Get buyer information - vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[16], is_supplier=False # C17 - VendidoA - ) + # Provider and client names now come directly from query (C8, C9) + # No need for additional database lookups # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( @@ -274,12 +267,12 @@ class TemporaryImportService: Fecha_Fin=row[11], # C12 - Fecha_Fin Fecha_Pago=row[12], # C13 - Fecha_Pago Remesa=row[13], # C14 - Remesa - Proveedor=proveedor_info.get('name'), - RFCProveedor=proveedor_info.get('rfc'), - ProveedorTaxID=proveedor_info.get('tax_id'), - VendidoA=vendido_info.get('name'), - VendidoARFC=vendido_info.get('rfc'), - VendidoATaxID=vendido_info.get('tax_id'), + Proveedor=row[7], # C8 - Provider name (from JOIN) + RFCProveedor=None, # RFC not in detailed query + ProveedorTaxID=None, # Tax ID not in detailed query + VendidoA=row[8], # C9 - Client name (from JOIN) + VendidoARFC=None, # RFC not in detailed query + VendidoATaxID=None, # Tax ID not in detailed query AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[19], # C20 - Clase (NumParte) From 7920b216540652941c0ec1d614e2efb3ead11549 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 3 Feb 2026 15:49:40 -0600 Subject: [PATCH 08/54] refactor: streamline client and supplier information retrieval across invoice services --- .../movements/invoices/services/definitive.py | 21 ++++++++++------ .../movements/invoices/services/export.py | 21 ++++++++++------ .../invoices/services/export_repair.py | 23 +++++++++++------ .../invoices/services/query_builders.py | 21 ++++++---------- .../movements/invoices/services/repair.py | 25 +++++++++++-------- .../movements/invoices/services/temporary.py | 1 + 6 files changed, 64 insertions(+), 48 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py index ee2f603e..5a2c1ee3 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -186,8 +186,13 @@ class DefinitiveImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Provider and client names now come directly from query (C8, C9) - # No need for additional database lookups + # Get all detailed information (same as temporary imports) + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) agente_info = DatabaseHelper.get_customs_agent_info( db, filters.database_name, row[17] ) @@ -251,12 +256,12 @@ class DefinitiveImportService: Fecha_Fin=row[11], Fecha_Pago=row[12], Remesa=row[13], - Proveedor=row[7], # C8 - Provider name (from JOIN) - RFCProveedor=None, # RFC not in detailed query - ProveedorTaxID=None, # Tax ID not in detailed query - VendidoA=row[8], # C9 - Client name (from JOIN) - VendidoARFC=None, # RFC not in detailed query - VendidoATaxID=None, # Tax ID not in detailed query + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[19], diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index d7513f1f..cfb594f7 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -187,8 +187,13 @@ class ExportService: if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus continue - # Provider and client names now come directly from query (C14, C15) - # No need for additional database lookups + # Get client/supplier information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( @@ -252,12 +257,12 @@ class ExportService: Fecha_Pago=row[10], # C11 - Fecha_Pago Remesa=row[11], # C12 - Remesa TipoCambio=tipo_cambio_final, - Proveedor=row[13], # C14 - Provider name (from JOIN) - RFCProveedor=None, # RFC not in detailed query - ProveedorTaxID=None, # Tax ID not in detailed query - VendidoA=row[14], # C15 - Client name (from JOIN) - VendidoARFC=None, # RFC not in detailed query - VendidoATaxID=None, # Tax ID not in detailed query + Proveedor=proveedor_info.get("name"), + RFCProveedor=proveedor_info.get("rfc"), + ProveedorTaxID=proveedor_info.get("tax_id"), + VendidoA=vendido_info.get("name"), + VendidoARFC=vendido_info.get("rfc"), + VendidoATaxID=vendido_info.get("tax_id"), AgenteAduanal=agente_info.get("name"), Patente=agente_info.get("license"), NumParte=row[17], # C18 - Clase diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index c3b7f088..13143ef6 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -188,8 +188,15 @@ class ExportRepairService: if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus continue - # Provider and client names now come directly from query (C14, C15) - # No need for additional database lookups + # Get provider information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + + # Get buyer information + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( @@ -264,12 +271,12 @@ class ExportRepairService: Fecha_Fin=row[9], # C10 - Fecha_Fin Fecha_Pago=row[10], # C11 - Fecha_Pago Remesa=row[11], # C12 - Remesa - Proveedor=row[13], # C14 - Provider name (from JOIN) - RFCProveedor=None, # RFC not in detailed query - ProveedorTaxID=None, # Tax ID not in detailed query - VendidoA=row[14], # C15 - Client name (from JOIN) - VendidoARFC=None, # RFC not in detailed query - VendidoATaxID=None, # Tax ID not in detailed query + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[17], # C18 - Clase (NumParte) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index 4851aebf..d4d2b765 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -235,10 +235,7 @@ class DefinitiveImportQueries: ih.invoice_date AS C3, -- [2] ped.status AS C4, -- [3] ped.pedimento_code AS C5, -- [4] - '' AS C6, -- [5] - '' AS C7, -- [6] - COALESCE(prov.name, '') AS C8, -- [7] Provider name - COALESCE(client.name, '') AS C9, -- [8] Client name + '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] ped.regime AS C10, -- [9] log.entry_exit_date AS C11, -- [10] log.delivery_date AS C12, -- [11] @@ -417,8 +414,8 @@ class RepairImportQueries: COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), COALESCE(cmp.remesa::text, ''), COALESCE(fin.exchange_rate, 0), - COALESCE(prov.name, ''), - COALESCE(client.name, ''), + COALESCE(cmp.provider_id::text, ''), + COALESCE(cmp.sold_to_id::text, ''), COALESCE(cmp.customs_broker_id::text, ''), COALESCE(il.part_number::text, ''), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), @@ -457,8 +454,6 @@ class RepairImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id - LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -580,8 +575,8 @@ class ExportQueries: log.payment_date AS C11, -- [10] log.payment_receipt_num AS C12, -- [11] '' AS C13, -- [12] - COALESCE(prov.name, '') AS C14, -- [13] Provider name - COALESCE(client.name, '') AS C15, -- [14] Client name + cmp.provider_id AS C14, -- [13] + cmp.sold_to_id AS C15, -- [14] cmp.customs_broker_id AS C16, -- [15] '' AS C17, -- [16] prt.part_number AS C18, -- [17] @@ -747,8 +742,8 @@ class ExportRepairQueries: COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, COALESCE(cmp.remesa::text, '') AS C12, COALESCE(fin.exchange_rate, 0) AS C13, - COALESCE(prov.name, '') AS C14, - COALESCE(client.name, '') AS C15, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, COALESCE(cmp.customs_broker_id::text, '') AS C16, '' AS C17, COALESCE(cls.class_code, '') AS C18, @@ -798,8 +793,6 @@ class ExportRepairQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id - LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index 26ceb14f..889d3185 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -200,8 +200,13 @@ class RepairImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Provider and client names now come directly from query - # No need for additional database lookups + # Get all detailed information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) agente_info = DatabaseHelper.get_customs_agent_info( db, filters.database_name, row[17] ) @@ -263,14 +268,14 @@ class RepairImportService: Regimen=row[9], Fecha_Inicio=row[10], Fecha_Fin=row[11], - Fecha_Pago=row[8], - Remesa=row[9], - Proveedor=row[11], # Provider name (from JOIN) - RFCProveedor=None, # RFC not in detailed query - ProveedorTaxID=None, # Tax ID not in detailed query - VendidoA=row[12], # Client name (from JOIN) - VendidoARFC=None, # RFC not in detailed query - VendidoATaxID=None, # Tax ID not in detailed query + Fecha_Pago=row[12], + Remesa=row[13], + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), NumParte=row[19], diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index b4d1ea2c..b249ebdf 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -192,6 +192,7 @@ class TemporaryImportService: # Provider and client names now come directly from query (C8, C9) # No need for additional database lookups + logger.info(f"Processing invoice {row[0]}: Proveedor='{row[7]}', VendidoA='{row[8]}', CantidadIE={row[22]}, DescripcionE='{row[20][:50] if row[20] else None}'") # Get customs agent information agente_info = DatabaseHelper.get_customs_agent_info( From 264100e2ea251f55cc6f7a1e20b90ee7ae6e5af6 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Thu, 5 Feb 2026 16:00:22 -0600 Subject: [PATCH 09/54] feat: Implement detailed and normal report types for invoice movements, enhancing number formatting and API request handling. --- .../importacion/consolidados/mex/service.py | 12 +- .../importacion/facturas/mex/service.py | 12 +- .../reports/importacion/facturas/routes.py | 3 +- .../importacion/facturas/usa/service.py | 9 +- .../importacion/packing_list/service.py | 14 +- .../movements/invoices/movement_service.py | 186 +- .../a76/reports/movements/invoices/routes.py | 22 +- .../a76/reports/movements/invoices/schemas.py | 4 + .../movements/invoices/services/base.py | 9 + .../invoices/services/database_helpers.py | 91 +- .../movements/invoices/services/definitive.py | 47 +- .../movements/invoices/services/export.py | 46 +- .../invoices/services/export_repair.py | 4 +- .../invoices/services/query_builders.py | 10 +- .../movements/invoices/services/repair.py | 131 +- .../movements/invoices/services/temporary.py | 78 +- backend/api/v1/modules/a76/router.py | 7 + .../api/dashboard/a76/invoice-movements.ts | 3 +- .../dashboard/a76/reports/reports-invoices.ts | 5 - .../exchange_rate/exchange-rate-guard.svelte | 89 +- .../dashboard/reports/invoices/+page.svelte | 3246 ++++++++++------- 21 files changed, 2276 insertions(+), 1752 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py index 34cbc9ef..4836c0ad 100644 --- a/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py @@ -67,12 +67,18 @@ class ConsolidadoImportacionMexService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ if valor is None: - return 0.0 + valor = 0.0 try: - return round(float(valor), decimales) + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" except: - return 0.0 + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py index 619ae2f5..a7163ed1 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py @@ -103,12 +103,18 @@ class FacturaImportacionMexService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ if valor is None: - return 0.0 + valor = 0.0 try: - return round(float(valor), decimales) + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" except: - return 0.0 + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py b/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py index 324bb91a..12595fda 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py @@ -41,9 +41,10 @@ async def trigger_descarga_factura( invoice_id: int, company_id: int = Query(..., description="ID de la empresa"), invoice_type: str = Query('mexican', description="Tipo de factura: 'mexican' o 'american'"), + currency_code: str = Query('ORIGINAL', description="Moneda: 'MXN', 'USD', o 'ORIGINAL'"), current_user: Dict[str, Any] = Depends(get_current_user), db: Session = Depends(get_core_db) ): validate_access_to_resource(db, company_id, current_user) - task = generar_pdf_factura_async.delay(invoice_id, company_id, invoice_type) + task = generar_pdf_factura_async.delay(invoice_id, company_id, invoice_type, currency_code) return {"task_id": task.id, "message": "Generación iniciada"} \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py b/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py index d5ec1d10..98eb0284 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py @@ -95,10 +95,13 @@ class FacturaImportacionUsaService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): - if valor is None: return 0.0 + if valor is None: + valor = 0.0 try: - return round(float(valor), decimales) - except: return 0.0 + num = round(float(valor), decimales) + return f"{num:,.{decimales}f}" + except: + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: diff --git a/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py b/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py index a6163592..55e1a1dc 100644 --- a/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py @@ -67,10 +67,18 @@ class PackingListService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): - if valor is None: return 0.0 + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ + if valor is None: + valor = 0.0 try: - return round(float(valor), decimales) - except: return 0.0 + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" + except: + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py index 303dd6e8..1d3cc18b 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py @@ -15,7 +15,8 @@ from .schemas import ( ExportRepairFilter, AllMovementsFilter, MovementItem, - MovementItemDetailed + MovementItemDetailed, + ReportType ) from .services.temporary import TemporaryImportService from .services.definitive import DefinitiveImportService @@ -163,7 +164,6 @@ class MovementService: # 1. Temporary Imports if should_fetch_imports: - try: temp_filter = ImportTemporaryFilter( range_type=filters.range_type, start_date=filters.start_date, @@ -172,121 +172,119 @@ class MovementService: provider=filters.provider, buyer=filters.buyer, pedimento_code=filters.pedimento_code, - report_type='Normal', # Always use normal mode for combined report + report_type=filters.report_type, # Use filter's report_type currency_type=filters.currency_type, exchange_rate_type=filters.exchange_rate_type, is_shelter=filters.is_shelter, database_name='default' # Required field ) - temp_movements = self.temporary_service.get_movements(db, temp_filter) + if filters.report_type == ReportType.DETAILED: + temp_movements = self.temporary_service.get_movements_detailed(db, temp_filter) + else: + temp_movements = self.temporary_service.get_movements(db, temp_filter) all_movements.extend(temp_movements) logger.info(f"Added {len(temp_movements)} temporary import movements") - except Exception as e: - db.rollback() # Rollback failed transaction - logger.warning(f"Error fetching temporary imports: {e}") # 2. Definitive Imports if should_fetch_imports: - try: - def_filter = ImportDefinitiveFilter( - range_type=filters.range_type, - start_date=filters.start_date, - end_date=filters.end_date, - include_cancelled=filters.include_cancelled, - provider=filters.provider, - buyer=filters.buyer, - pedimento_code=filters.pedimento_code, - report_type='Normal', - currency_type=filters.currency_type, - exchange_rate_type=filters.exchange_rate_type, - is_shelter=filters.is_shelter, - database_name='default', - movement_type='ALL' # Required field - include all definitive types - ) + def_filter = ImportDefinitiveFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + def_movements = self.definitive_service.get_movements_detailed(db, def_filter) + else: def_movements = self.definitive_service.get_movements(db, def_filter) - all_movements.extend(def_movements) - logger.info(f"Added {len(def_movements)} definitive import movements") - except Exception as e: - db.rollback() # Rollback failed transaction - logger.warning(f"Error fetching definitive imports: {e}") + all_movements.extend(def_movements) + logger.info(f"Added {len(def_movements)} definitive import movements") # 3. Repair Imports if should_fetch_imports: - try: - repair_filter = ImportRepairFilter( - range_type=filters.range_type, - start_date=filters.start_date, - end_date=filters.end_date, - include_cancelled=filters.include_cancelled, - provider=filters.provider, - buyer=filters.buyer, - pedimento_code=filters.pedimento_code, - report_type='Normal', - currency_type=filters.currency_type, - exchange_rate_type=filters.exchange_rate_type, - is_shelter=filters.is_shelter, - database_name='default', - discharge_filter='ALL' # Required field - include all discharge statuses - ) + repair_filter = ImportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + discharge_filter='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + repair_movements = self.repair_service.get_movements_detailed(db, repair_filter) + else: repair_movements = self.repair_service.get_movements(db, repair_filter) - all_movements.extend(repair_movements) - logger.info(f"Added {len(repair_movements)} repair import movements") - except Exception as e: - db.rollback() # Rollback failed transaction - logger.warning(f"Error fetching repair imports: {e}") + all_movements.extend(repair_movements) + logger.info(f"Added {len(repair_movements)} repair import movements") # 4. Exports (Definitive) if should_fetch_exports: - try: - export_filter = ExportFilter( - range_type=filters.range_type, - start_date=filters.start_date, - end_date=filters.end_date, - include_cancelled=filters.include_cancelled, - provider=filters.provider, - buyer=filters.buyer, - pedimento_code=filters.pedimento_code, - report_type='Normal', - currency_type=filters.currency_type, - exchange_rate_type=filters.exchange_rate_type, - is_shelter=filters.is_shelter, - database_name='default', - movement_type='ALL', # Required field - discharge_filter='ALL', # Required field - use_transport_method=False # Required field - ) + export_filter = ExportFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + discharge_filter='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + export_movements = self.export_service.get_movements_detailed(db, export_filter) + else: export_movements = self.export_service.get_movements(db, export_filter) - all_movements.extend(export_movements) - logger.info(f"Added {len(export_movements)} export movements") - except Exception as e: - db.rollback() # Rollback failed transaction - logger.warning(f"Error fetching exports: {e}") + all_movements.extend(export_movements) + logger.info(f"Added {len(export_movements)} export movements") # 5. Export Repairs if should_fetch_exports: - try: - export_repair_filter = ExportRepairFilter( - range_type=filters.range_type, - start_date=filters.start_date, - end_date=filters.end_date, - include_cancelled=filters.include_cancelled, - provider=filters.provider, - buyer=filters.buyer, - pedimento_code=filters.pedimento_code, - report_type='Normal', - currency_type=filters.currency_type, - exchange_rate_type=filters.exchange_rate_type, - is_shelter=filters.is_shelter, - database_name='default', - movement_type='ALL', # Required field - discharge_filter='ALL' # Required field - ) + export_repair_filter = ExportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + discharge_filter='ALL' + ) + if filters.report_type == ReportType.DETAILED: + export_repair_movements = self.export_repair_service.get_movements_detailed(db, export_repair_filter) + else: export_repair_movements = self.export_repair_service.get_movements(db, export_repair_filter) - all_movements.extend(export_repair_movements) - logger.info(f"Added {len(export_repair_movements)} export repair movements") - except Exception as e: - db.rollback() # Rollback failed transaction - logger.warning(f"Error fetching export repairs: {e}") + all_movements.extend(export_repair_movements) + logger.info(f"Added {len(export_repair_movements)} export repair movements") # Sort all movements by date (Fecha field) # Handle mixed datetime and string types diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py index e6b8a37e..21eff0cc 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py @@ -1,7 +1,7 @@ import logging from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session -from typing import List +from typing import List, Union from core.database import get_core_db from core.security import get_current_user @@ -65,6 +65,12 @@ def get_temporary_import_movements( ) logger.info(f"Successfully retrieved {len(movements)} movements") return movements + except ValueError as e: + logger.warning(f"Validation error fetching movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) except Exception as e: logger.error(f"Error fetching movements: {str(e)}", exc_info=True) raise HTTPException( @@ -121,6 +127,12 @@ def get_temporary_import_movements_detailed( ) logger.info(f"Successfully retrieved {len(movements)} detailed movements") return movements + except ValueError as e: + logger.warning(f"Validation error fetching detailed movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) except Exception as e: logger.error(f"Error fetching detailed movements: {str(e)}", exc_info=True) raise HTTPException( @@ -584,7 +596,7 @@ def get_export_repair_movements_detailed( @router.post( "/all", - response_model=List[MovementItem], + response_model=Union[List[MovementItemDetailed], List[MovementItem]], summary="Get All Invoice Movements", description=""" Retrieve all invoice movements (imports and exports of all types) from database. @@ -624,6 +636,12 @@ def get_all_movements( ) logger.info(f"Successfully retrieved {len(movements)} total movements") return movements + except ValueError as e: + logger.warning(f"Validation error fetching all movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) except Exception as e: logger.error(f"Error fetching all movements: {str(e)}", exc_info=True) raise HTTPException( diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py index 966868ed..3f4ede62 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py @@ -83,6 +83,10 @@ class AllMovementsFilter(BaseModel): default=None, description="Filter by pedimento code (ClavePed)" ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal (grouped by invoice) or Detailed (line by line)" + ) currency_type: CurrencyType = Field( default=CurrencyType.FOREIGN, description="Currency type for value calculations" diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py index 14b62a88..e04262a8 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py @@ -40,6 +40,15 @@ class StringHelper: if not text: return text return text.replace(',', '') + + @staticmethod + def clean_text(text: Optional[str]) -> Optional[str]: + """Clean text by stripping whitespace and removing special characters.""" + if not text: + return None + # Remove special characters and extra whitespace + cleaned = text.strip() + return cleaned if cleaned else None class DateHelper: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py index cfe08acb..93954c4d 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py @@ -75,8 +75,8 @@ class DatabaseHelper: fecha_str = fecha.strftime('%d/%m/%Y') if hasattr(fecha, 'strftime') else str(fecha) ped_info = f" del Pedimento: {pedimento_number}" if pedimento_number else "" raise ValueError( - f"El Tipo de Cambio para la Fecha de Pago: {fecha_str}{ped_info} no está capturado. " - f"Solución: Capturar el Tipo de Cambio para la Fecha: {fecha_str}." + f"Falta el tipo de cambio del día {fecha_str}. " + f"Por favor regístralo en el catálogo de Tipos de Cambio." ) logger.warning(f"Exchange rate not found for date {fecha}") return None @@ -108,11 +108,11 @@ class DatabaseHelper: if not client_code: return {"name": None, "rfc": None, "tax_id": None} - client_type = 'provider' if is_supplier else 'client' + client_type = 'PROVIDER' if is_supplier else 'CLIENT' try: sql = text(""" - SELECT name, rfc, tax_id + SELECT name, rfc FROM a76.clients_and_providers WHERE id = :client_code AND client_or_provider = :client_type """) @@ -122,14 +122,14 @@ class DatabaseHelper: return { "name": result[0], "rfc": result[1], - "tax_id": result[2] + "tax_id": None # Column does not exist in this table } else: logger.debug(f"Client {client_code} not found as {client_type}") return {"name": None, "rfc": None, "tax_id": None} except Exception as e: logger.error(f"Error fetching client info for {client_code}: {e}") - return {"name": None, "rfc": None, "tax_id": None} + raise @staticmethod def get_customs_agent_info( @@ -170,7 +170,7 @@ class DatabaseHelper: return {"name": None, "license": None} except Exception as e: logger.error(f"Error fetching customs agent info for {agent_code}: {e}") - return {"name": None, "license": None} + raise @staticmethod def get_aduana_seccion_nombre( @@ -202,13 +202,13 @@ class DatabaseHelper: return result[0] if result else None except Exception as e: logger.error(f"Error fetching customs section name: {e}") - return None + raise @staticmethod def get_series_info( db: Session, db_name: str, - consecutivo: str, + invoice_id: int, linea: str, is_shelter: bool ) -> Optional[str]: @@ -217,30 +217,30 @@ class DatabaseHelper: Args: db: Database session - db_name: Legacy database name - consecutivo: Consecutivo value - linea: LineaImpo value - is_shelter: Shelter flag + db_name: Legacy database name (not used in PostgreSQL) + invoice_id: Invoice header ID + linea: Line number + is_shelter: Shelter flag (not used) Returns: Formatted series string or None """ - if not consecutivo or not linea: + if not invoice_id or not linea: return None try: query = text(""" SELECT serial_numbers, model, brand FROM a76.item_line_series ils - INNER JOIN a76.item_lines il ON ils.item_line_id = il.id + INNER JOIN a76.item_lines il ON ils.line_item_id = il.id INNER JOIN a76.items i ON il.item_id = i.id - WHERE i.consecutivo = :consecutivo + WHERE i.invoice_id = :invoice_id AND il.line_number = :linea ORDER BY ils.id LIMIT 1 """) result = db.execute(query, { - "consecutivo": consecutivo, + "invoice_id": invoice_id, "linea": linea }).fetchone() @@ -257,13 +257,13 @@ class DatabaseHelper: return None except Exception as e: logger.error(f"Error fetching series info: {e}") - return None + raise @staticmethod def get_series_info_export( db: Session, db_name: str, - consecutivo: str, + invoice_id: int, linea: str, is_shelter: bool ) -> Optional[str]: @@ -273,29 +273,31 @@ class DatabaseHelper: Args: db: Database session db_name: Legacy database name - consecutivo: Consecutivo value + invoice_id: Invoice header ID linea: LineaExpo value is_shelter: Shelter flag Returns: Formatted series string or None """ - if not consecutivo or not linea: + if not invoice_id or not linea: return None try: + # Note: Postgres items table calls it expo_brad (typo in DB schema) + # ItemLineSeries FK is line_item_id, not item_line_id query = text(""" - SELECT serial_numbers, model, expo_brand + SELECT serial_numbers, model, expo_brad FROM a76.item_line_series ils - INNER JOIN a76.item_lines il ON ils.item_line_id = il.id + INNER JOIN a76.item_lines il ON ils.line_item_id = il.id INNER JOIN a76.items i ON il.item_id = i.id - WHERE i.consecutivo = :consecutivo + WHERE i.invoice_id = :invoice_id AND il.line_number = :linea ORDER BY ils.id LIMIT 1 """) result = db.execute(query, { - "consecutivo": consecutivo, + "invoice_id": invoice_id, "linea": linea }).fetchone() @@ -308,11 +310,11 @@ class DatabaseHelper: parts.append(model) if expo_brand: parts.append(expo_brand) - return " / ".join(parts) if parts else None + return " | ".join(parts) if parts else None return None except Exception as e: logger.error(f"Error fetching export series info: {e}") - return None + raise @staticmethod def get_rectification_pedimento( @@ -497,4 +499,39 @@ class DatabaseHelper: return result[0] if result else None except Exception as e: logger.error(f"Error fetching driver badge for invoice {factura}: {e}") + raise + + @staticmethod + def get_part_export_symbol( + db: Session, + db_name: str, + num_parte: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get export symbol/license for a part number. + + Args: + db: Database session + db_name: Database name (not used in PostgreSQL, kept for compatibility) + num_parte: Part number + is_shelter: Shelter flag (not used, kept for compatibility) + + Returns: + Export symbol/license or None + """ + if not num_parte: return None + + try: + query = text(""" + SELECT exclusion_symbol + FROM a76.parts + WHERE part_number = :num_parte + LIMIT 1 + """) + result = db.execute(query, {"num_parte": num_parte}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching export symbol for part {num_parte}: {e}") + raise diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py index 5a2c1ee3..442252b9 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -77,9 +77,18 @@ class DefinitiveImportService: invoice_id = row[16] # C35 - invoice ID + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[28] # total_me from SUM aggregation - total_mn = row[29] # total_mn from SUM aggregation + total_me = to_float(row[28]) # total_me from SUM aggregation + total_mn = to_float(row[29]) # total_mn from SUM aggregation # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -87,10 +96,10 @@ class DefinitiveImportService: db_name=filters.database_name, valor_me=total_me, valor_mn=total_mn, - tipo_cambio_db=row[20], # C51 - TipoCambio + tipo_cambio_db=to_float(row[20]), # C51 - TipoCambio fecha_pago=row[8], # C13 - Fecha_Pago fecha_inicio=row[6], # C11 - Fecha_Inicio - tipo_pedimento=row[27], # C59 - TIPOPEDIMENTOTRANSPORTEE + tipo_pedimento=row[4], # C5 - ClavePed (Fix: using C5 instead of empty C59) currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, is_shelter=filters.is_shelter, @@ -134,7 +143,7 @@ class DefinitiveImportService: UsuarioAcr=row[23], # C54 - UsuarioAct Fecha_Pago=parse_yyyymmdd_date(row[8]), # C13 - Fecha_Pago NumCaja=row[24], # C56 - Transporte + NumTrasporte - tipo_pedimento=row[25], # C57 - Pedimento18 + tipo_pedimento=row[25], # C57 - Pedimento18 (Note: Schema doesn't have tipo_pedimento field, this might be extra) AduanaCru=row[15], # C39 - Aduana_Cruce Lote=row[26] # C58 - LOTE ) @@ -186,7 +195,9 @@ class DefinitiveImportService: if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus continue - # Get all detailed information (same as temporary imports) + # Get additional detailed information + # Provider and client names now come directly from query (row[7], row[8]) + # But we still need RFC and TaxID from the helper proveedor_info = DatabaseHelper.get_client_info( db, filters.database_name, row[15], is_supplier=True ) @@ -225,13 +236,13 @@ class DefinitiveImportService: peso_bruto = 0.0 series_info = DatabaseHelper.get_series_info( - db, filters.database_name, row[40], row[44], filters.is_shelter + db, filters.database_name, row[34], row[44], filters.is_shelter ) simbolo_ex = None - if row[49]: + if row[19]: simbolo_ex = DatabaseHelper.get_part_export_symbol( - db, filters.database_name, row[49], filters.is_shelter + db, filters.database_name, row[19], filters.is_shelter ) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( @@ -256,10 +267,10 @@ class DefinitiveImportService: Fecha_Fin=row[11], Fecha_Pago=row[12], Remesa=row[13], - Proveedor=proveedor_info.get('name'), + Proveedor=row[7], # C8 - Provider name (from JOIN) RFCProveedor=proveedor_info.get('rfc'), ProveedorTaxID=proveedor_info.get('tax_id'), - VendidoA=vendido_info.get('name'), + VendidoA=row[8], # C9 - Client name (from JOIN) VendidoARFC=vendido_info.get('rfc'), VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), @@ -276,7 +287,7 @@ class DefinitiveImportService: OrdenCompraVenta=row[30], FraccionArancelaria=row[31], Preferencia=row[32], - Sector=row[34], + Sector=None, # row[34] is invoice ID, Sector not in query PaisOrigen=row[37], Aduana=aduana_nombre, Advalorem=row[39], @@ -319,12 +330,8 @@ class DefinitiveImportService: where_conditions.append("ih.operation_type = 'imp'") # GOLDEN RULE: If movement_type is ALL, only filter by operation_type - if hasattr(filters, 'movement_type') and filters.movement_type == 'ALL': - # ALL mode: bring all imports without filtering by specific invoice_type - pass - else: - # Specific mode: Filter by definitive invoice types only - where_conditions.append("ih.invoice_type IN ('DEF', 'MATDE', 'EXDEF')") + # ALWAYS filter by specific invoice_type to avoid duplication with Temporary service + where_conditions.append("ih.invoice_type IN ('DEF', 'MATDE', 'EXDEF')") # Date range filter if filters.range_type.value == "FF": @@ -337,11 +344,11 @@ class DefinitiveImportService: # Provider filter if filters.provider: - where_conditions.append(f"cmp.provider_id = {filters.provider}") + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") # Buyer filter if filters.buyer: - where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") # Pedimento code filter if filters.pedimento_code: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index cfb594f7..331f1858 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -226,8 +226,8 @@ class ExportService: peso_bruto_final = row[25] if row[37] == 'P' else 0 # C26 - PesoBruto # Get series information - series_info = self._get_series_info( - db, filters.database_name, row[34], row[41] # C35 - Consecutivo, C42 - LineaExpo + series_info = DatabaseHelper.get_series_info_export( + db, filters.database_name, row[34], row[41], filters.is_shelter ) # Get pedimento rectification @@ -348,9 +348,9 @@ class ExportService: # Optional filters if filters.provider: - conditions.append(f"cmp.provider_id = {filters.provider}") + conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") if filters.buyer: - conditions.append(f"cmp.sold_to_id = {filters.buyer}") + conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") if filters.pedimento_code: conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") @@ -383,44 +383,6 @@ class ExportService: logger.error(f"Error calculating export totals for consecutivo {consecutivo}: {e}") return (0, 0) - def _get_series_info( - self, - db: Session, - db_name: str, - consecutivo: int, - linea: int - ) -> str: - """Get series information for export partida.""" - if not consecutivo or not linea: - return None - - try: - sql = text(ExportQueries.build_series_query(db_name)) - results = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() - - if not results: - return None - - series_list = [] - for idx, row in enumerate(results, 1): - serie = row[0] - modelo = row[1] - parte = row[2] - - serie_str = f"{idx}) {serie}" - if modelo: - serie_str += f". Modelo: {modelo}" - if parte: - serie_str += f". Parte: {parte}" - - series_list.append(serie_str) - - return " | ".join(series_list) if series_list else None - - except Exception as e: - logger.debug(f"Error fetching export series info for consecutivo {consecutivo}, linea {linea}: {e}") - return None - def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: """Get driver's unique badge number for an export invoice.""" if not factura: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 13143ef6..8f8887f8 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -350,11 +350,11 @@ class ExportRepairService: # Provider filter if filters.provider: - where_conditions.append(f"cmp.provider_id = {filters.provider}") + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") # Buyer filter if filters.buyer: - where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") # Pedimento code filter if filters.pedimento_code: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index d4d2b765..23a9ae23 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -235,7 +235,10 @@ class DefinitiveImportQueries: ih.invoice_date AS C3, -- [2] ped.status AS C4, -- [3] ped.pedimento_code AS C5, -- [4] - '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] + '' AS C6, -- [5] + '' AS C7, -- [6] + COALESCE(prov.name, '') AS C8, -- [7] Provider name + COALESCE(client.name, '') AS C9, -- [8] Client name ped.regime AS C10, -- [9] log.entry_exit_date AS C11, -- [10] log.delivery_date AS C12, -- [11] @@ -290,6 +293,8 @@ class DefinitiveImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -653,7 +658,8 @@ class ExportQueries: COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id - LEFT JOIN a24.fa_item_lines fil ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id WHERE itm.invoice_id = :consecutivo {discharge_filter} """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index 889d3185..f462f8b1 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -81,9 +81,18 @@ class RepairImportService: consecutivo = row[14] # C30 - Consecutivo + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[24] # total_me from SUM aggregation - total_mn = row[25] # total_mn from SUM aggregation + total_me = to_float(row[24]) # total_me from SUM aggregation + total_mn = to_float(row[25]) # total_mn from SUM aggregation # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -91,7 +100,7 @@ class RepairImportService: db_name=filters.database_name, valor_me=total_me, valor_mn=total_mn, - tipo_cambio_db=row[17], # C40 - TipoCambio + tipo_cambio_db=to_float(row[17]), # C40 - TipoCambio fecha_pago=row[6], # C9 - Fecha_Pago fecha_inicio='', # Not available in aggregated query tipo_pedimento=row[23], # C47 - pedimento_code (used as tipo_pedimento) @@ -197,79 +206,79 @@ class RepairImportService: for row in results: # Skip cancelled if not included - if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + if not filters.include_cancelled and row[4] != 'AC': # C5 - Estatus continue # Get all detailed information proveedor_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[15], is_supplier=True + db, filters.database_name, row[11], is_supplier=True ) vendido_info = DatabaseHelper.get_client_info( - db, filters.database_name, row[16], is_supplier=False + db, filters.database_name, row[12], is_supplier=False ) agente_info = DatabaseHelper.get_customs_agent_info( - db, filters.database_name, row[17] + db, filters.database_name, row[13] ) aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( - db, filters.database_name, row[38] + db, filters.database_name, row[28] ) # Calculate values using unified method valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( db=db, db_name=filters.database_name, - es_subpartida=row[39], # EsSubPartida - valor_me=row[26], - valor_mn_direct=row[24], - fecha_pago=row[12], - fecha_inicio=row[10], - clave_ped=row[58], - tipo_cambio_partida=row[50], + es_subpartida=row[30], # 'P' or 'S' + valor_me=row[20], + valor_mn_direct=row[19], + fecha_pago=row[8], + fecha_inicio=row[7], + clave_ped=row[45], + tipo_cambio_partida=row[38], currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, met_trans=met_trans ) # Set peso values based on subpartida flag - if row[39] == 'P': - peso_neto = float(row[28]) if row[28] else 0.0 - peso_bruto = float(row[29]) if row[29] else 0.0 + if row[30] == 'P': + peso_neto = float(row[21]) if row[21] else 0.0 + peso_bruto = float(row[22]) if row[22] else 0.0 else: peso_neto = 0.0 peso_bruto = 0.0 series_info = DatabaseHelper.get_series_info( - db, filters.database_name, row[40], row[44], filters.is_shelter + db, filters.database_name, row[29], row[0], filters.is_shelter ) simbolo_ex = None - if row[49]: + if row[14]: simbolo_ex = DatabaseHelper.get_part_export_symbol( - db, filters.database_name, row[49], filters.is_shelter + db, filters.database_name, row[14], filters.is_shelter ) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( - db, row[1], row[41], filters.is_shelter + db, row[2], row[41], filters.is_shelter ) num_gaf_uni = DatabaseHelper.get_driver_badge( - db, filters.database_name, row[0] + db, filters.database_name, row[1] ) movement = MovementItemDetailed( - Linea=row[44], - Factura=row[0], - Pedimento=row[1], - FechaFactura=row[2], - Estatus=row[3], - ClavePed=row[4], + Linea=row[0], + Factura=row[1], + Pedimento=row[2], + FechaFactura=row[3], + Estatus=row[4], + ClavePed=row[5], TipoMovTemDef='IMPRE', EsCambioRegimen='N', - Regimen=row[9], - Fecha_Inicio=row[10], - Fecha_Fin=row[11], - Fecha_Pago=row[12], - Remesa=row[13], + Regimen=row[6], + Fecha_Inicio=row[7], + Fecha_Fin=row[7], # Using same valid column or empty + Fecha_Pago=row[8], + Remesa=row[9], Proveedor=proveedor_info.get('name'), RFCProveedor=proveedor_info.get('rfc'), ProveedorTaxID=proveedor_info.get('tax_id'), @@ -278,42 +287,42 @@ class RepairImportService: VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[19], - DescripcionE=StringHelper.clean_text(row[20]), - DescripcionI=StringHelper.clean_text(row[21]), - CantidadIE=float(row[22]) if row[22] else 0.0, - UniMed=row[23], + NumParte=row[14], + DescripcionE=StringHelper.clean_text(row[15]), + DescripcionI=StringHelper.clean_text(row[16]), + CantidadIE=float(row[17]) if row[17] else 0.0, + UniMed=row[18], ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, - OrdenCompraVenta=row[30], - FraccionArancelaria=row[31], - Preferencia=row[32], - Sector=row[34], - PaisOrigen=row[37], + OrdenCompraVenta=row[23], + FraccionArancelaria=row[24], + Preferencia=row[25], + Sector=row[26], + PaisOrigen=row[27], Aduana=aduana_nombre, - Advalorem=row[39], + Advalorem=row[30], TipoExpo='', PedimentoR1=pedimento_r1, - EDocument=row[42], - NumOperacionVU=row[43], + EDocument=row[32], + NumOperacionVU=row[33], Series=series_info, - Marca=StringHelper.clean_text(row[45]), - Modelo=StringHelper.clean_text(row[46]), - FraccionAmericana=row[47], - ECCN=row[48], + Marca=StringHelper.clean_text(row[34]), + Modelo=StringHelper.clean_text(row[35]), + FraccionAmericana=row[36], + ECCN=row[37], SimboloEx=simbolo_ex, - FechaEmision=row[51], + FechaEmision=row[39], BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, - UsuarioCap=row[52], - UsuarioAcr=row[53], - Transportista=row[54], - NumCaja=row[55], - Pedimento18=row[56], - AduanaCru=row[38], - Lote=row[57] + UsuarioCap=row[40], + UsuarioAcr=row[41], + Transportista=row[42], + NumCaja=row[43], + Pedimento18=row[44], + AduanaCru=row[28], + Lote='' # Not in query ) movements.append(movement) @@ -345,11 +354,11 @@ class RepairImportService: # Provider filter if filters.provider: - where_conditions.append(f"cmp.provider_id = {filters.provider}") + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") # Buyer filter if filters.buyer: - where_conditions.append(f"cmp.sold_to_id = {filters.buyer}") + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") # Pedimento code filter if filters.pedimento_code: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index b249ebdf..70fa5ca5 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -77,9 +77,23 @@ class TemporaryImportService: consecutivo = row[15] # C39 - Consecutivo + # Helper to convert empty strings to None + def none_if_empty(val): + return None if val == '' else val + + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[27] # total_me from SUM aggregation - total_mn = row[28] # total_mn from SUM aggregation + # Correct indices based on TemporaryImportQueries.build_aggregated_query + total_me = to_float(row[28]) # total_me (index 28) + total_mn = to_float(row[29]) # total_mn (index 29) # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -87,10 +101,10 @@ class TemporaryImportService: db_name=filters.database_name, valor_me=total_me, valor_mn=total_mn, - tipo_cambio_db=row[19], # C50 - TipoCambio + tipo_cambio_db=to_float(row[19]), # C50 - TipoCambio fecha_pago=row[8], # C13 - Fecha_Pago fecha_inicio=row[6], # C11 - Fecha_Inicio - tipo_pedimento=row[26], # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_pedimento=row[4], # C5 - ClavePed (Using correct index) currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, is_shelter=filters.is_shelter, @@ -111,10 +125,6 @@ class TemporaryImportService: db, filters.database_name, factura ) - # Helper to convert empty strings to None - def none_if_empty(val): - return None if val == '' else val - # Build movement item movement = MovementItem( Factura=factura, @@ -138,9 +148,9 @@ class TemporaryImportService: UsuarioAcr=row[22], # C53 - UsuarioAct Fecha_Pago=parse_yyyymmdd_date(none_if_empty(row[8])), # C13 - Fecha_Pago NumCaja=row[23], # C55 - Transporte + NumTrasporte - Pedimento18=row[24], # C56 - Pedimento18 + Pedimento18=row[24], # C56 - Pedimento18 (Actually empty in query, but safe to keep) AduanaCru=row[14], # C38 - Aduana_Cruce - Lote=row[25] # C57 - LOTE + Lote=row[25] # C57 - LOTE (Actually C55 is index 24. C56 is 25) ) movements.append(movement) @@ -220,6 +230,14 @@ class TemporaryImportService: met_trans=met_trans ) + # ValorComercialMN should always be in MXN + # If currency_type is ME, valor_comercial is in USD, so multiply by tipo_cambio + if filters.currency_type.value == "ME" and tipo_cambio: + valor_comercial_mn = valor_comercial * tipo_cambio + else: + # If currency_type is MN, valor_comercial is already in MXN + valor_comercial_mn = valor_comercial + # Set peso values based on subpartida flag if row[39] == 'P': # C40 - EsSubPartida peso_neto = float(row[28]) if row[28] else 0.0 # C29 @@ -253,21 +271,35 @@ class TemporaryImportService: db, filters.database_name, row[0] # C1 - FacturaImpo ) + # Helper to convert empty strings to None for dates + def none_if_empty(val): + if val == '' or val is None: + return None + return val + + # Helper to convert to string (for Remesa, Advalorem) + def to_str(val): + if val is None or val == '': + return None + if isinstance(val, bool): + return 'P' if val else 'S' # Convert bool to P/S for Advalorem + return str(val) + # Build detailed movement item movement = MovementItemDetailed( Linea=row[43], # C44 - LineaImpo Factura=row[0], # C1 - FacturaImpo Pedimento=row[1], # C2 - PedimentoImpo - FechaFactura=row[2], # C3 - FechaFactura + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura (convert to datetime) Estatus=row[3], # C4 - Estatus ClavePed=row[4], # C5 - ClavePed TipoMovTemDef='IMTEM', EsCambioRegimen='N', Regimen=row[9], # C10 - Regimen - Fecha_Inicio=row[10], # C11 - Fecha_Inicio - Fecha_Fin=row[11], # C12 - Fecha_Fin - Fecha_Pago=row[12], # C13 - Fecha_Pago - Remesa=row[13], # C14 - Remesa + Fecha_Inicio=none_if_empty(row[10]), # C11 - Fecha_Inicio + Fecha_Fin=none_if_empty(row[11]), # C12 - Fecha_Fin + Fecha_Pago=none_if_empty(row[12]), # C13 - Fecha_Pago + Remesa=to_str(row[13]), # C14 - Remesa Proveedor=row[7], # C8 - Provider name (from JOIN) RFCProveedor=None, # RFC not in detailed query ProveedorTaxID=None, # Tax ID not in detailed query @@ -281,7 +313,7 @@ class TemporaryImportService: DescripcionI=StringHelper.clean_text(row[21]), # C22 CantidadIE=float(row[22]) if row[22] else 0.0, # C23 UniMed=row[23], # C24 - ValorComercialMN=valor_comercial, + ValorComercialMN=valor_comercial_mn, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, @@ -291,7 +323,7 @@ class TemporaryImportService: Sector=row[34], # C35 - Sector PaisOrigen=row[36], # C37 - PaisOrigen Aduana=aduana_nombre, - Advalorem=row[39], # C40 - EsSubPartida + Advalorem=to_str(row[39]), # C40 - EsSubPartida (convert bool to str) TipoExpo='', PedimentoR1=pedimento_r1, EDocument=row[41], # C42 - EDocument @@ -302,7 +334,7 @@ class TemporaryImportService: FraccionAmericana=row[46], # C47 - FraccionAme ECCN=row[47], # C48 - ECCN SimboloEx=simbolo_ex, - FechaEmision=row[50], # C51 - FechaEmision + FechaEmision=parse_yyyymmdd_date(row[50]), # C51 - FechaEmision (convert to datetime) BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, UsuarioCap=row[51], # C52 - UsuarioCap @@ -329,10 +361,8 @@ class TemporaryImportService: # STRICT SEPARATION: Only temporary imports where_conditions.append("ih.operation_type = 'imp'") - # GOLDEN RULE: If coming from /all, only filter by operation_type - # otherwise, apply specific invoice_type filter - if not hasattr(filters, 'from_all_endpoint') or not filters.from_all_endpoint: - where_conditions.append("ih.invoice_type IN ('TEM', 'MATTEM')") + # ALWAYS filter by specific invoice_type to avoid duplication with Definitive service + where_conditions.append("ih.invoice_type IN ('TEM', 'MATTEM')") # Date range filter if filters.range_type.value == "FF": @@ -345,11 +375,11 @@ class TemporaryImportService: # Provider filter if filters.provider: - where_conditions.append(f"cmp.provider_id::text = '{filters.provider}'") + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") # Buyer filter if filters.buyer: - where_conditions.append(f"cmp.sold_to_id::text = '{filters.buyer}'") + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") # Pedimento code filter if filters.pedimento_code: diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index 01c8c57d..8a0ff1f8 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -53,6 +53,7 @@ from .reports.importacion.facturas.routes import router as invoices_reports_rout from .reports.importacion.consolidados.routes import router as consolidated_reports_router from .reports.importacion.packing_list.routes import router as packing_list_router from .reports.exportacion.aviso_consolidado.routes import router as aviso_consolidado_export_router +from .reports.movements.invoices.routes import router as movement_invoices_router @@ -145,4 +146,10 @@ router.include_router( aviso_consolidado_export_router, prefix="/a76/reports/exportacion/aviso_consolidado", tags=["a76 / reports"] +) + +router.include_router( + movement_invoices_router, + prefix="/a76/reports/movements/invoices", + tags=["a76 / reports"] ) \ No newline at end of file diff --git a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts index a5b7dafe..ce6daa22 100644 --- a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts +++ b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts @@ -28,7 +28,7 @@ export interface BaseFilter { database_name: string; } -export interface ImportTemporaryFilter extends BaseFilter {} +export interface ImportTemporaryFilter extends BaseFilter { } export interface ImportDefinitiveFilter extends BaseFilter { movement_type: MovementTypeFilter; @@ -57,6 +57,7 @@ export interface AllMovementsFilter { provider?: string | null; buyer?: string | null; pedimento_code?: string | null; + report_type: ReportType; currency_type: CurrencyType; exchange_rate_type: ExchangeRateType; is_shelter: boolean; diff --git a/frontend/src/lib/api/dashboard/a76/reports/reports-invoices.ts b/frontend/src/lib/api/dashboard/a76/reports/reports-invoices.ts index 7041c3a6..313e31a7 100644 --- a/frontend/src/lib/api/dashboard/a76/reports/reports-invoices.ts +++ b/frontend/src/lib/api/dashboard/a76/reports/reports-invoices.ts @@ -1,5 +1,4 @@ -const BASE_URL = import.meta.env.VITE_API_URL || ''; const BASE_URL = import.meta.env.VITE_API_URL || ''; export const invoicesReportsApi = { @@ -15,7 +14,6 @@ export const invoicesReportsApi = { const token = localStorage.getItem('access_token'); const response = await fetch(endpoint, { - method: 'POST', method: 'POST', headers: { 'Authorization': `Bearer ${token}`, @@ -25,14 +23,11 @@ export const invoicesReportsApi = { if (!response.ok) throw new Error('Error al iniciar la generación'); return await response.json(); - return await response.json(); }, getTaskStatus: async (taskId: string) => { const endpoint = `${BASE_URL}/v1/a76/reports/importacion/facturas/tasks/${taskId}`; - const endpoint = `${BASE_URL}/v1/a76/reports/importacion/facturas/tasks/${taskId}`; - const token = localStorage.getItem('access_token'); const response = await fetch(endpoint, { method: 'GET', diff --git a/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte b/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte index 8f113fc1..b3d22504 100644 --- a/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte +++ b/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte @@ -1,59 +1,48 @@ - + diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte index a1f33b08..6c3083ad 100644 --- a/frontend/src/routes/dashboard/reports/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -1,1434 +1,1862 @@ -
- - -
-
-

- - Reporte de Facturas -

- - V2.0 - -
-
- Sistema Fiscal -
-
+
+ +
+
+

+ + Reporte de Facturas +

+ + V2.0 + +
+
Sistema Fiscal
+
- + - -
- {#each menuOptions as item} - {#if item.items.length > 0} - - - {#snippet child({ props })} - - {/snippet} - - - {item.label} - -
- {#each item.items as subItem} - toast.info(`Seleccionado: ${subItem}`)}> - {subItem} - - {/each} -
-
-
- {:else} - - {/if} - {/each} -
- - + +
+ {#each menuOptions as item} + {#if item.items.length > 0} + + + {#snippet child({ props })} + + {/snippet} + + + {item.label} + +
+ {#each item.items as subItem} + toast.info(`Seleccionado: ${subItem}`)}> + {subItem} + + {/each} +
+
+
+ {:else} + + {/if} + {/each} +
- -
+ - - - - - Periodo y Clasificación - - - -
-
- - -
-
- - -
-
+ +
+ + + + + Periodo y Clasificación + + + +
+
+ + +
+
+ + +
+
- + -
- -
- -
- {#each Object.keys(types.import) as key} -
- - -
- {/each} -
-
+
+ +
+ +
+ {#each Object.keys(types.import) as key} +
+ + +
+ {/each} +
+
- -
- -
- {#each Object.keys(types.other) as key} -
- { if (key === 'TODAS') handleTodasChange(v as boolean); }} - /> - -
- {/each} -
-
-
- - -
- - -
- -
- -
-
- - -
-
- - -
-
- - -
-
-
- - -
- -
- {#each Object.keys(types.export.additional) as key} -
- - -
- {/each} -
-
-
-
- - + +
+ +
+ {#each Object.keys(types.other) as key} +
+ { + if (key === 'TODAS') handleTodasChange(v as boolean); + }} + /> + +
+ {/each} +
+
+
- - - - - Filtros e Identificadores - - - -
- {#each [ - { label: 'Proveedor', key: 'provider' as const }, - { label: 'Vendido a', key: 'soldTo' as const }, - { label: 'Clave de Pedimento', key: 'pedimentoKey' as const } - ] as item} -
- -
- - -
-
- {/each} -
+ +
+ -
- -
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
-
- - -
- - -
- -
- -
- - -
-
- - -
-
- - -
-
-
-
- - + +
+ +
+ {#each Object.keys(types.export.additional) as key} +
+ + +
+ {/each} +
+
+
+
+
+
- - - - - Configuración Final - - - - -
-
- - -
- - -
-
- - -
-
-
+ + + + + Filtros e Identificadores + + + +
+ {#each [{ label: 'Proveedor', key: 'provider' as const }, { label: 'Vendido a', key: 'soldTo' as const }, { label: 'Clave de Pedimento', key: 'pedimentoKey' as const }] as item} +
+ +
+ + +
+
+ {/each} +
-
- - -
- - -
-
- - -
-
- - -
-
-
-
+
+ +
-
- -
+
+ -
-
- - -
- - -
-
- - -
-
-
-
- - -
- - -
-
- - -
-
-
-
+
+ + +
-
- -
-
- - -
-
- - -
-
- - -
-
-
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
-
- - - - -
-
+ + + + + Configuración Final + + + +
+
+ + +
+ + +
+
+ + +
+
+
- - { if (!v) showResults = false; }}> - - -
-
- - - {reportTitle} - - - {results.length} registros encontrados • {currencyLabel} - -
-
- - - - Cerrar - -
-
-
- -
-
- - - - {#each (config.reportType === 'normal' ? - ['PEDIMENTO', 'CLAVE', 'FACTURA', 'FECHA FACT', 'VALOR COM.', 'TIPO OPER.', 'ESTATUS', 'PROYECTO'] : - ['PEDIMENTO', 'FACTURA', 'FECHA FACT', 'PROVEEDOR', 'CLIENTE', 'CANTIDAD', 'DESC. ESPAÑOL', 'TIPO OPER.']) as header} - - {/each} - - - - {#each results as row} - - {#if config.reportType === 'normal'} - - - - - - - - - {:else} - {@const detailRow = row as MovementItemDetailed} - - - - - - - - - {/if} - - {/each} - -
- {header} -
{row.Pedimento || '-'}{row.ClavePed || '-'}{row.Factura}{formatDateFromYYYYMMDD(row.FechaFactura)}${formatCurrency(row.ValorComercialMN)} - - {row.TipoMovTemDef} - - - - {row.Estatus || 'A'} - - {row.BaseDeDatos}{detailRow.Pedimento || '-'}{detailRow.Factura}{formatDateFromYYYYMMDD(detailRow.FechaFactura)}{detailRow.Proveedor || '-'}{detailRow.VendidoA || '-'}{detailRow.CantidadIE || '0'}{detailRow.DescripcionE || '-'} - - {detailRow.TipoMovTemDef} - -
-
-
-
-
+
+ + +
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+ +
+
+ + +
+ + +
+
+ + +
+
+
+
+ + +
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + + +
+
+ + + { + if (!v) showResults = false; + }} + > + + +
+
+ + + {reportTitle} + + + {results.length} registros encontrados • {currencyLabel} + +
+
+ + + + Cerrar + +
+
+
+ +
+
+ + + + {#each config.reportType === 'normal' ? ['PEDIMENTO', 'CLAVE', 'FACTURA', 'FECHA FACT', 'VALOR COM.', 'TIPO OPER.', 'ESTATUS', 'PROYECTO'] : ['PEDIMENTO', 'FACTURA', 'FECHA FACT', 'PROVEEDOR', 'CLIENTE', 'CANTIDAD', 'DESC. ESPAÑOL', 'TIPO OPER.'] as header} + + {/each} + + + + {#each results as row} + + {#if config.reportType === 'normal'} + + + + + + + + + {:else} + {@const detailRow = row as MovementItemDetailed} + + + + + + + + + {/if} + + {/each} + +
+ {header} +
{row.Pedimento || '-'}{row.ClavePed || '-'}{row.Factura}{formatDateFromYYYYMMDD(row.FechaFactura)}${formatCurrency(row.ValorComercialMN)} + + {row.TipoMovTemDef} + + + + {row.Estatus || 'A'} + + {row.BaseDeDatos}{detailRow.Pedimento || '-'}{detailRow.Factura}{formatDateFromYYYYMMDD(detailRow.FechaFactura)}{detailRow.Proveedor || '-'}{detailRow.VendidoA || '-'}{detailRow.CantidadIE || '0'}{detailRow.DescripcionE || '-'} + + {detailRow.TipoMovTemDef} + +
+
+
+
+
- - - - Seleccionar {dialogType === 'pedimentoKey' ? 'Clave de Pedimento' : dialogType === 'provider' ? 'Proveedor' : 'Cliente'} - - - Busca y selecciona {dialogType === 'pedimentoKey' ? 'una clave de pedimento' : dialogType === 'provider' ? 'un proveedor' : 'un cliente'} de la lista - - - -
-
- - -
- -
- {#if dialogType === 'pedimentoKey'} - - - - - - - - - - {#if filteredItems.length === 0} - - - - {:else} - {#each filteredItems as item} - selectItem(item)}> - - - - - {/each} - {/if} - -
CódigoDescripciónAcción
- No se encontraron resultados -
{item.code || '-'}{item.description || '-'} - -
- {:else} - - - - - - - - - - - - - - - - - {#if filteredItems.length === 0} - - - - {:else} - {#each filteredItems as item} - selectItem(item)}> - - - - - - - - - - - - {/each} - {/if} - -
ClaveNombreTipoRFCCallesNúm. ExtCPColoniaCiudadAcción
- No se encontraron resultados -
{item.id || '-'}{item.name || '-'} - - {item.client_or_provider === 'provider' ? 'P' : - item.client_or_provider === 'client' ? 'C' : - 'A'} - - {item.rfc || '-'}{item.address?.streets || '-'}{item.address?.exterior_number || '-'}{item.address?.postal_code || '-'}{item.address?.neighborhood || '-'}{item.address?.city || '-'} - -
- {/if} -
-
- - - - -
+ + + + Seleccionar {dialogType === 'pedimentoKey' + ? 'Clave de Pedimento' + : dialogType === 'provider' + ? 'Proveedor' + : 'Cliente'} + + + Busca y selecciona {dialogType === 'pedimentoKey' + ? 'una clave de pedimento' + : dialogType === 'provider' + ? 'un proveedor' + : 'un cliente'} de la lista + + + +
+
+ + +
+ +
+ {#if dialogType === 'pedimentoKey'} + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)} + > + + + + + {/each} + {/if} + +
CódigoDescripciónAcción
+ No se encontraron resultados +
{item.code || '-'}{item.description || '-'} + +
+ {:else} + + + + + + + + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)} + > + + + + + + + + + + + + {/each} + {/if} + +
ClaveNombreTipoRFCCallesNúm. ExtCPColoniaCiudadAcción
+ No se encontraron resultados +
{item.id || '-'}{item.name || '-'} + + {item.client_or_provider === 'provider' + ? 'P' + : item.client_or_provider === 'client' + ? 'C' + : 'A'} + + {item.rfc || '-'}{item.address?.streets || '-'}{item.address?.exterior_number || '-'}{item.address?.postal_code || '-'}{item.address?.neighborhood || '-'}{item.address?.city || '-'} + +
+ {/if} +
+
+ + + + +
From f3f763cd6da4c78259e43faac8c71edee91d60a0 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 6 Feb 2026 15:31:30 -0600 Subject: [PATCH 10/54] feat: Implement asynchronous invoice report generation with email delivery and frontend status polling. --- .../reports/movements/invoices/csv_utils.py | 87 +++ .../movements/invoices/movement_service.py | 35 +- .../a76/reports/movements/invoices/routes.py | 102 ++- .../a76/reports/movements/invoices/schemas.py | 41 ++ .../invoices/services/query_builders.py | 55 +- .../movements/invoices/services/temporary.py | 4 +- .../a76/reports/movements/invoices/tasks.py | 108 +++ backend/api/v1/modules/a76/router.py | 1 - backend/core/celery_app.py | 3 +- backend/core/config.py | 8 + backend/core/email.py | 117 ++++ backend/requirements.txt | 2 +- .../api/dashboard/a76/invoice-movements.ts | 20 +- .../dashboard/reports/invoices/+page.svelte | 614 +++++++----------- 14 files changed, 797 insertions(+), 400 deletions(-) create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/tasks.py create mode 100644 backend/core/email.py diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py new file mode 100644 index 00000000..004b7ae4 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py @@ -0,0 +1,87 @@ +""" +CSV generation utilities for invoice movement reports. +""" +import csv +import io +from typing import List, Union +from datetime import datetime + +from .schemas import MovementItem, MovementItemDetailed + + +def generate_csv_from_movements( + movements: List[Union[MovementItem, MovementItemDetailed]], + report_type: str = "normal" +) -> str: + """ + Generate CSV content from movement items. + + Args: + movements: List of movement items (normal or detailed) + report_type: "normal" or "detailed" + + Returns: + CSV content as string + """ + output = io.StringIO() + + if report_type.lower() == "normal": + # Normal report columns + fieldnames = [ + 'Pedimento', 'ClavePed', 'Factura', 'FechaFactura', + 'ValorComercialMN', 'TipoMovTemDef', 'Estatus', 'BaseDeDatos', + 'TipoCambio', 'Fecha_Pago', 'ValorMPTemp', 'ValorAgre', + 'TipoExpo', 'EsCambioRegimen', 'Regimen' + ] + + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') + writer.writeheader() + + for movement in movements: + row = movement.model_dump() + # Format datetime fields + if row.get('FechaFactura'): + row['FechaFactura'] = _format_datetime(row['FechaFactura']) + if row.get('Fecha_Pago'): + row['Fecha_Pago'] = _format_datetime(row['Fecha_Pago']) + writer.writerow(row) + + else: + # Detailed report columns + fieldnames = [ + 'Linea', 'Pedimento', 'Factura', 'FechaFactura', + 'Proveedor', 'VendidoA', 'CantidadIE', 'DescripcionE', + 'DescripcionI', 'NumParte', 'UniMed', 'ValorComercialMN', + 'TipoMovTemDef', 'ClavePed', 'Estatus', 'TipoCambio', + 'PesoNeto', 'PesoBruto', 'OrdenCompraVenta', 'Regimen', + 'AgenteAduanal', 'Patente', 'BaseDeDatos' + ] + + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') + writer.writeheader() + + for movement in movements: + row = movement.model_dump() + # Format datetime fields + if row.get('FechaFactura'): + row['FechaFactura'] = _format_datetime(row['FechaFactura']) + if row.get('Fecha_Pago'): + row['Fecha_Pago'] = _format_datetime(row['Fecha_Pago']) + if row.get('Fecha_Inicio'): + row['Fecha_Inicio'] = _format_datetime(row['Fecha_Inicio']) + if row.get('Fecha_Fin'): + row['Fecha_Fin'] = _format_datetime(row['Fecha_Fin']) + writer.writerow(row) + + csv_content = output.getvalue() + output.close() + return csv_content + + +def _format_datetime(dt) -> str: + """Format datetime for CSV export.""" + if isinstance(dt, datetime): + return dt.strftime('%Y-%m-%d %H:%M:%S') + elif isinstance(dt, str): + return dt + return '' diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py index 1d3cc18b..41af2b37 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py @@ -154,16 +154,25 @@ class MovementService: # Convert AllMovementsFilter to individual filter types # We'll use the same filter parameters for all queries - # Determine which services to call based on operation_type filter - should_fetch_imports = filters.operation_type in [None, 'imp'] - should_fetch_exports = filters.operation_type in [None, 'exp'] + # Determine which services to call based on granular flags + # Default behavior: If granular flags are all defaults (True) but operation_type is set, + # we might need to respect operation_type. + # But for simplicity, we assume granular flags from frontend are the source of truth. + # If frontend didn't set them (legacy call?), they default to True. - logger.info(f"Operation type filter: {filters.operation_type}") - logger.info(f"Should fetch imports: {should_fetch_imports}") - logger.info(f"Should fetch exports: {should_fetch_exports}") + # Override based on operation_type if provided (legacy compatibility or coarse filter) + if filters.operation_type == 'imp': + filters.export_def = False + filters.export_rep = False + elif filters.operation_type == 'exp': + filters.import_temp = False + filters.import_def = False + filters.import_rep = False + + logger.info(f"Fetching movements with flags: Temp={filters.import_temp}, Def={filters.import_def}, Rep={filters.import_rep}, ExpDef={filters.export_def}, ExpRep={filters.export_rep}") # 1. Temporary Imports - if should_fetch_imports: + if filters.import_temp: temp_filter = ImportTemporaryFilter( range_type=filters.range_type, start_date=filters.start_date, @@ -172,11 +181,11 @@ class MovementService: provider=filters.provider, buyer=filters.buyer, pedimento_code=filters.pedimento_code, - report_type=filters.report_type, # Use filter's report_type + report_type=filters.report_type, currency_type=filters.currency_type, exchange_rate_type=filters.exchange_rate_type, is_shelter=filters.is_shelter, - database_name='default' # Required field + database_name='default' ) if filters.report_type == ReportType.DETAILED: temp_movements = self.temporary_service.get_movements_detailed(db, temp_filter) @@ -186,7 +195,7 @@ class MovementService: logger.info(f"Added {len(temp_movements)} temporary import movements") # 2. Definitive Imports - if should_fetch_imports: + if filters.import_def: def_filter = ImportDefinitiveFilter( range_type=filters.range_type, start_date=filters.start_date, @@ -211,7 +220,7 @@ class MovementService: logger.info(f"Added {len(def_movements)} definitive import movements") # 3. Repair Imports - if should_fetch_imports: + if filters.import_rep: repair_filter = ImportRepairFilter( range_type=filters.range_type, start_date=filters.start_date, @@ -236,7 +245,7 @@ class MovementService: logger.info(f"Added {len(repair_movements)} repair import movements") # 4. Exports (Definitive) - if should_fetch_exports: + if filters.export_def: export_filter = ExportFilter( range_type=filters.range_type, start_date=filters.start_date, @@ -262,7 +271,7 @@ class MovementService: logger.info(f"Added {len(export_movements)} export movements") # 5. Export Repairs - if should_fetch_exports: + if filters.export_rep: export_repair_filter = ExportRepairFilter( range_type=filters.range_type, start_date=filters.start_date, diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py index 21eff0cc..0d406f07 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py @@ -604,9 +604,11 @@ def get_export_repair_movements_detailed( Use this when "TODAS" checkbox is selected to get a comprehensive view of all movements regardless of their specific type. + + If send_email is True, the report will be sent to the authenticated user's email address. """ ) -def get_all_movements( +async def get_all_movements( filters: AllMovementsFilter, db: Session = Depends(get_core_db), current_user: dict = Depends(get_current_user) @@ -628,13 +630,52 @@ def get_all_movements( try: logger.info( f"User {current_user.get('preferred_username', 'unknown')} " - f"requesting all invoice movements" + f"requesting all invoice movements (send_email={filters.send_email})" ) movements = movement_service.get_all_movements( db=db, filters=filters ) logger.info(f"Successfully retrieved {len(movements)} total movements") + + # Send email if requested + if filters.send_email: + user_email = current_user.get('email') + if not user_email: + logger.warning(f"User {current_user.get('sub')} has no email address - skipping email") + else: + try: + from core.email import EmailService + from .csv_utils import generate_csv_from_movements + from datetime import datetime + + # Generate CSV + csv_content = generate_csv_from_movements( + movements=movements, + report_type=filters.report_type.value.lower() + ) + + # Generate filename + filename = f"reporte_facturas_{filters.start_date}_{filters.end_date}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + # Send email + email_sent = await EmailService.send_report_email( + recipient_email=user_email, + subject=f"Reporte de Facturas - {filters.start_date} al {filters.end_date}", + body_text=f"Se ha generado el reporte de facturas solicitado con {len(movements)} registros.", + csv_content=csv_content, + filename=filename + ) + + if email_sent: + logger.info(f"Report emailed successfully to {user_email}") + else: + logger.warning(f"Failed to send email to {user_email} - SMTP may not be configured correctly") + + except Exception as email_error: + logger.warning(f"Email sending failed: {str(email_error)} - continuing with report generation") + + return movements return movements except ValueError as e: logger.warning(f"Validation error fetching all movements: {str(e)}") @@ -642,9 +683,66 @@ def get_all_movements( status_code=status.HTTP_400_BAD_REQUEST, detail=str(e) ) + except HTTPException: + raise except Exception as e: logger.error(f"Error fetching all movements: {str(e)}", exc_info=True) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Error processing all movements: {str(e)}" ) + + +@router.post( + "/generate", + summary="Generate Invoice Report (Async)", + description="Trigger background generation of invoice report." +) +def generate_invoice_report_async( + filters: AllMovementsFilter, + current_user: dict = Depends(get_current_user) +): + """ + Trigger background generation of invoice report. + Returns task_id to poll status. + """ + from .tasks import generate_invoice_movements_async + + logger.info(f"User {current_user.get('preferred_username', 'unknown')} triggering async report generation") + + # Serialize filters to dict for Celery + filter_data = filters.model_dump() + user_email = current_user.get('email') + + # Trigger task + task = generate_invoice_movements_async.delay(filter_data, user_email) + + return {"task_id": task.id} + + +@router.get( + "/task/{task_id}", + summary="Get Async Task Status", + description="Check status of background report generation task." +) +def get_task_status(task_id: str): + """ + Get status of background task. + """ + from celery.result import AsyncResult + from core.celery_app import celery_app + + task_result = AsyncResult(task_id, app=celery_app) + + response = { + "task_id": task_id, + "status": task_result.status, + } + + if task_result.state == 'PROCESSING': + response["meta"] = task_result.info + + if task_result.ready(): + response["result"] = task_result.result + + return response diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py index 3f4ede62..002331cf 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py @@ -103,6 +103,27 @@ class AllMovementsFilter(BaseModel): default=None, description="Filter by operation type: 'imp' for imports only, 'exp' for exports only, None for all" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + # Granular movement selection + import_temp: bool = Field(default=True, description="Include temporary imports (IMTEM)") + import_def: bool = Field(default=True, description="Include definitive imports (IMPDF/COMEX)") + import_rep: bool = Field(default=True, description="Include repair imports (IMPRE)") + export_def: bool = Field(default=True, description="Include definitive exports") + export_rep: bool = Field(default=True, description="Include repair exports") + + # Specific filters + export_types: Optional[list[str]] = Field( + default=None, + description="Specific export legacy codes to include (AFIJO, NODES, etc)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Global discharge filter for repair movements" + ) class ImportTemporaryFilter(BaseModel): @@ -155,6 +176,10 @@ class ImportTemporaryFilter(BaseModel): ..., description="Legacy database name to query from" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) class ImportDefinitiveFilter(BaseModel): @@ -215,6 +240,10 @@ class ImportDefinitiveFilter(BaseModel): ..., description="Legacy database name to query from" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) class MovementItem(BaseModel): """Movement item representing a temporary import invoice""" @@ -317,6 +346,10 @@ class ImportRepairFilter(BaseModel): ..., description="Legacy database name to query from" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) class MovementItemDetailed(BaseModel): @@ -464,6 +497,10 @@ class ExportFilter(BaseModel): ..., description="Legacy database name" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) model_config = { "json_schema_extra": { @@ -545,6 +582,10 @@ class ExportRepairFilter(BaseModel): ..., description="Legacy database name" ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) model_config = { "json_schema_extra": { diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index 23a9ae23..86bf2f1a 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -353,7 +353,14 @@ class RepairImportQueries: @staticmethod def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: """Build optimized query for NORMAL mode (grouped by invoice with totals).""" - discharge_filter = "" # Temporarily disabled until schema migration + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" SELECT ih.invoice_number AS C2, @@ -403,9 +410,13 @@ class RepairImportQueries: @staticmethod def build_main_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: """Build main SQL query for repair import data.""" - # Note: is_discharged field not yet migrated to PostgreSQL schema - # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" - discharge_filter = "" # Temporarily disabled until schema migration + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" return f""" SELECT il.line_number, @@ -479,9 +490,13 @@ class RepairImportQueries: @staticmethod def build_totals_query(db_name: str, discharge_clause: str = "") -> str: """Build query to get totals for a repair import invoice.""" - # Note: is_discharged field not yet migrated to PostgreSQL schema - # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" - discharge_filter = "" # Temporarily disabled until schema migration + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" return f""" SELECT COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), @@ -651,7 +666,13 @@ class ExportQueries: Only sums partidas where is_subitem is false (main partidas, not sub-items). """ - discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" return f""" SELECT COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), @@ -689,8 +710,14 @@ class ExportRepairQueries: @staticmethod def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: """Build optimized query for NORMAL mode (grouped by invoice with totals).""" - # Note: discharge_clause temporarily disabled until is_discharged field migrated - discharge_filter = "" # Will be: " AND il.is_discharged = true/false" when ready + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" SELECT ih.invoice_number AS C1, @@ -817,7 +844,13 @@ class ExportRepairQueries: @staticmethod def build_totals_query(db_name: str, discharge_clause: str = "") -> str: """Build query to get totals for an export repair invoice.""" - discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" return f""" SELECT COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index 70fa5ca5..474f6d07 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -233,10 +233,10 @@ class TemporaryImportService: # ValorComercialMN should always be in MXN # If currency_type is ME, valor_comercial is in USD, so multiply by tipo_cambio if filters.currency_type.value == "ME" and tipo_cambio: - valor_comercial_mn = valor_comercial * tipo_cambio + valor_comercial_mn = float(valor_comercial) * float(tipo_cambio) else: # If currency_type is MN, valor_comercial is already in MXN - valor_comercial_mn = valor_comercial + valor_comercial_mn = float(valor_comercial) # Set peso values based on subpartida flag if row[39] == 'P': # C40 - EsSubPartida diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py new file mode 100644 index 00000000..a2de6aef --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py @@ -0,0 +1,108 @@ + +import base64 +import logging +import traceback +from typing import Dict, Any + +from core.celery_app import celery_app +from core.database import CoreSessionLocal +from core.email import EmailService +from datetime import datetime + +from .movement_service import movement_service +from .schemas import AllMovementsFilter +from .csv_utils import generate_csv_from_movements + +logger = logging.getLogger(__name__) + +@celery_app.task(bind=True, name="generate_invoice_movements_async") +def generate_invoice_movements_async(self, filter_data: Dict[str, Any], user_email: str = None): + """ + Async task to generate invoice movements report. + FETCHES data -> GENERATES CSV -> SENDS EMAIL (optional) -> RETURNS CSV (base64) + """ + db = CoreSessionLocal() + try: + # 1. Update Progress + self.update_state(state='PROCESSING', meta={'current': 10, 'total': 100, 'status': 'Inicializando reporte...'}) + + # 2. Reconstruct Filter + filters = AllMovementsFilter(**filter_data) + + # 3. Fetch Data + self.update_state(state='PROCESSING', meta={'current': 30, 'total': 100, 'status': 'Obteniendo movimientos de base de datos...'}) + logger.info(f"Async Task: Fetching movements for {filters}") + + movements = movement_service.get_all_movements(db=db, filters=filters) + + self.update_state(state='PROCESSING', meta={'current': 70, 'total': 100, 'status': f'Procesando {len(movements)} registros...'}) + + # 4. Generate CSV + csv_content = generate_csv_from_movements( + movements=movements, + report_type=filters.report_type.value.lower() + ) + + # 5. Send Email if requested + email_sent = False + if filters.send_email and user_email: + self.update_state(state='PROCESSING', meta={'current': 90, 'total': 100, 'status': 'Enviando correo electrónico...'}) + try: + # Generate filename + filename = f"reporte_facturas_{filters.start_date}_{filters.end_date}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + # Send email (using the new async wrapper or run_until_complete if needed, + # but since we are in a sync celery task we might need to be careful with async/await. + # Actually EmailService.send_report_email is async. + # We need to run it synchronously here or make the task async. + # Celery tasks are sync by default. We can use asgiref.sync.async_to_sync + + import asyncio + from asgiref.sync import async_to_sync + + # Helper to run async method + result = async_to_sync(EmailService.send_report_email)( + recipient_email=user_email, + subject=f"Reporte de Facturas - {filters.start_date} al {filters.end_date}", + body_text=f"Se ha generado el reporte de facturas solicitado con {len(movements)} registros.", + csv_content=csv_content, + filename=filename + ) + + if result: + email_sent = True + logger.info(f"Async Task: Email sent to {user_email}") + else: + logger.warning(f"Async Task: Failed to send email to {user_email}") + + except Exception as e: + logger.error(f"Async Task: Email error: {str(e)}") + + # 6. Encode and Return + self.update_state(state='PROCESSING', meta={'current': 95, 'total': 100, 'status': 'Finalizando...'}) + + # Convert string csv to bytes then base64 + pdf_b64 = base64.b64encode(csv_content.encode('utf-8')).decode('utf-8') + + return { + 'status': 'success', + 'file_name': f"reporte_facturas_{datetime.now().strftime('%Y%m%d')}.csv", + 'content': pdf_b64, + 'media_type': 'text/csv', + 'email_sent': email_sent, + 'total_records': len(movements) + } + + except Exception as e: + logger.error(f"Error in generate_invoice_movements_async: {str(e)}", exc_info=True) + self.update_state( + state='FAILURE', + meta={ + 'exc_type': type(e).__name__, + 'exc_message': str(e), + 'custom': 'Error generating report' + } + ) + raise e + finally: + db.close() diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index 8a0ff1f8..7b89d8b8 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -56,7 +56,6 @@ from .reports.exportacion.aviso_consolidado.routes import router as aviso_consol from .reports.movements.invoices.routes import router as movement_invoices_router - # Router principal router = APIRouter() diff --git a/backend/core/celery_app.py b/backend/core/celery_app.py index 3e41aa5f..235149f8 100644 --- a/backend/core/celery_app.py +++ b/backend/core/celery_app.py @@ -12,7 +12,8 @@ celery_app = Celery( "api.v1.modules.a76.reports.importacion.facturas.task", "api.v1.modules.a76.reports.importacion.consolidados.task", "api.v1.modules.a76.reports.importacion.packing_list.task", - "api.v1.modules.a76.reports.exportacion.aviso_consolidado.task" + "api.v1.modules.a76.reports.exportacion.aviso_consolidado.task", + "api.v1.modules.a76.reports.movements.invoices.tasks" ] # Ruta al módulo donde están las tareas ) diff --git a/backend/core/config.py b/backend/core/config.py index 37c5d52f..b44417d4 100644 --- a/backend/core/config.py +++ b/backend/core/config.py @@ -47,6 +47,14 @@ class Settings(BaseSettings): SITAR_API_USER: str = "" SITAR_API_PASSWORD: str = "" + # SMTP Email Configuration + SMTP_HOST: str = "smtp.gmail.com" + SMTP_PORT: int = 587 + SMTP_USER: str = "" + SMTP_PASSWORD: str = "" + SMTP_FROM_NAME: str = "Sistema Anexo76" + SMTP_USE_TLS: bool = True + model_config = SettingsConfigDict( env_file=[".env", "../.env"], case_sensitive=True, diff --git a/backend/core/email.py b/backend/core/email.py new file mode 100644 index 00000000..41b81a67 --- /dev/null +++ b/backend/core/email.py @@ -0,0 +1,117 @@ +""" +Email service for sending reports via SMTP. +""" +import aiosmtplib +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.base import MIMEBase +from email import encoders +from typing import List +import logging +from datetime import datetime + +from core.config import settings + +logger = logging.getLogger(__name__) + + +class EmailService: + """Service for sending emails with attachments.""" + + @staticmethod + async def send_report_email( + recipient_email: str, + subject: str, + body_text: str, + csv_content: str, + filename: str + ) -> bool: + """ + Send a report email with CSV attachment. + + Args: + recipient_email: Email address of recipient + subject: Email subject line + body_text: Plain text email body + csv_content: CSV file content as string + filename: Name for the CSV attachment + + Returns: + bool: True if email sent successfully, False otherwise + """ + try: + # Create message + msg = MIMEMultipart() + msg['From'] = f"{settings.SMTP_FROM_NAME} <{settings.SMTP_USER}>" + msg['To'] = recipient_email + msg['Subject'] = subject + + # Email body + html_body = f""" + + +
+

+ Reporte de Facturas - Sistema Anexo76 +

+

{body_text}

+

+ El reporte se encuentra adjunto en formato CSV. +

+
+

+ Este es un correo generado automáticamente. Por favor no responder. +

+

+ Generado el {datetime.now().strftime('%d/%m/%Y a las %H:%M')} +

+
+ + + """ + msg.attach(MIMEText(html_body, 'html')) + + # CSV attachment + attachment = MIMEBase('text', 'csv') + attachment.set_payload(csv_content.encode('utf-8')) + encoders.encode_base64(attachment) + attachment.add_header( + 'Content-Disposition', + f'attachment; filename="{filename}"' + ) + msg.attach(attachment) + + # Create SSL context that ignores certificate errors + import ssl + context = ssl.create_default_context() + context.check_hostname = False + context.verify_mode = ssl.CERT_NONE + + # Send email + if settings.SMTP_PORT == 465: + # Port 465 uses implicit SSL + async with aiosmtplib.SMTP( + hostname=settings.SMTP_HOST, + port=settings.SMTP_PORT, + use_tls=True, # Implicit SSL + tls_context=context + ) as smtp: + await smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD) + await smtp.send_message(msg) + else: + # Port 587 uses STARTTLS + async with aiosmtplib.SMTP( + hostname=settings.SMTP_HOST, + port=settings.SMTP_PORT, + tls_context=context + ) as smtp: + await smtp.starttls(tls_context=context) + await smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD) + await smtp.send_message(msg) + + logger.info(f"Email sent successfully to {recipient_email}") + return True + + except Exception as e: + logger.error(f"Failed to send email to {recipient_email}: {str(e)}") + return False diff --git a/backend/requirements.txt b/backend/requirements.txt index c169f2ca..d21c8780 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -50,4 +50,4 @@ redis==5.0.1 flower==2.0.1 # Barcode -pdf417gen==0.8.1 \ No newline at end of file +pdf417gen==0.8.1asgiref==3.8.1 diff --git a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts index ce6daa22..5424bc4b 100644 --- a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts +++ b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts @@ -62,6 +62,15 @@ export interface AllMovementsFilter { exchange_rate_type: ExchangeRateType; is_shelter: boolean; operation_type?: 'imp' | 'exp' | null; + send_email?: boolean; + // Granular flags + import_temp?: boolean; + import_def?: boolean; + import_rep?: boolean; + export_def?: boolean; + export_rep?: boolean; + export_types?: string[]; + discharge_filter?: DischargeFilter; } export interface MovementItem { @@ -181,5 +190,14 @@ export const invoiceMovementsApi = { // All Movements getAllMovements: (filters: AllMovementsFilter) => - api.post('/v1/a76/reports/movements/invoices/all', filters) + api.post('/v1/a76/reports/movements/invoices/all', filters), + + // Async Generation + generateReportAsync: (filters: AllMovementsFilter) => + api.post<{ task_id: string }>('/v1/a76/reports/movements/invoices/generate', filters), + + getTaskStatus: (taskId: string) => + api.get<{ task_id: string; status: string; result?: any; meta?: any }>( + `/v1/a76/reports/movements/invoices/task/${taskId}` + ) }; diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte index 6c3083ad..33bc86c2 100644 --- a/frontend/src/routes/dashboard/reports/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -28,7 +28,8 @@ ShieldCheck, Calculator, Download, - Folder + Folder, + Eye } from 'lucide-svelte'; import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; import * as Dialog from '$lib/components/ui/dialog'; @@ -346,395 +347,229 @@ // --- LÓGICA --- - async function handleGenerateReport() { - // Validar fechas - const dateValidation = validateDates(); - if (!dateValidation.valid) { - toast.error(`Error: ${dateValidation.message}`); - return; - } + // Estado del Context Menu + let contextMenu = $state({ + open: false, + x: 0, + y: 0 + }); - // Validar tipos de movimiento - const movementValidation = validateMovementTypes(); - if (!movementValidation.valid) { - toast.error(`Error: ${movementValidation.message}`); - return; - } + function handleContextMenu(e: MouseEvent) { + e.preventDefault(); + contextMenu = { + open: true, + x: e.clientX, + y: e.clientY + }; + } - // Validar reglas de negocio del Clarion - const businessValidation = validateBusinessRules(); - if (!businessValidation.valid) { - toast.error(`Error: ${businessValidation.message}`); - return; + function closeContextMenu() { + contextMenu.open = false; + } + + // Acción: Generar Reporte (Email / Background) - Click Izquierdo + async function generateReport() { + const filter = buildAllMovementsFilter(); + if (!filter) return; + + // Forzar envío de correo para esta acción + filter.send_email = true; + + loading = true; + // Initial toast + const toastId = toast.loading('Iniciando generación de reporte...'); + + try { + // 1. Trigger Async Generation + const response = await invoiceMovementsApi.generateReportAsync(filter); + + if (!response.data || !response.data.task_id) { + toast.error('Error al iniciar la generación del reporte', { id: toastId }); + loading = false; + return; + } + + const taskId = response.data.task_id; + + // 2. Poll for status + const pollInterval = setInterval(async () => { + try { + const statusResponse = await invoiceMovementsApi.getTaskStatus(taskId); + const statusData = statusResponse.data; + + if (!statusData) return; + + if (statusData.status === 'SUCCESS') { + clearInterval(pollInterval); + loading = false; + toast.success( + 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', + { id: toastId } + ); + } else if (statusData.status === 'FAILURE') { + clearInterval(pollInterval); + loading = false; + // Try to extract specific error from meta or result + const errorMsg = + statusData.meta?.exc_message || + statusData.result?.exc_message || + statusData.result?.detail || + 'Error en la generación del reporte'; + + console.error('Task Failure Details:', statusData); + toast.error(errorMsg, { id: toastId }); + } else if (statusData.status === 'PROCESSING') { + // Update progress + if (statusData.meta) { + const { current, total, status } = statusData.meta; + const percentage = Math.round((current / total) * 100); + toast.loading(`${status} (${percentage}%)`, { id: toastId }); + } + } + } catch (err) { + console.error('Error polling status:', err); + // Don't stop polling on transient network errors, but maybe log it + } + }, 1000); // Poll every 1 second + } catch (error: any) { + console.error('Error generando reporte:', error); + toast.error(error.message || 'Error al generar el reporte', { id: toastId }); + loading = false; } + } + + // Acción: Vista Previa (Tabla) - Click Derecho -> Opción + async function previewReport() { + closeContextMenu(); + const filter = buildAllMovementsFilter(); + if (!filter) return; + + // Para preview, no enviamos correo (o respetamos config, pero generalmente preview es solo ver) + filter.send_email = false; loading = true; results = []; showResults = false; + toast.info('Cargando vista previa...'); + try { - // Si "TODAS" en otras opciones o exportaciones está marcado, usar el endpoint especial - if (types.other.TODAS || types.export.additional.TODAS) { - toast.info('Obteniendo todos los movimientos...'); + const response = await invoiceMovementsApi.getAllMovements(filter); - // Determinar el tipo de operación basado en cuál "TODAS" está marcado - let operation_type: 'imp' | 'exp' | null = null; - - if (types.other.TODAS) { - // "TODAS" de la sección Otras = traer TODO (importaciones + exportaciones) - operation_type = null; - } else if (types.export.additional.TODAS) { - // "TODAS" de exportaciones = solo exportaciones - operation_type = 'exp'; - } - - const allMovementsFilter: AllMovementsFilter = { - range_type: dates.type === 'invoice' ? 'FF' : 'FP', - start_date: formatDateToYYYYMMDD(dates.from), - end_date: formatDateToYYYYMMDD(dates.to), - include_cancelled: filters.includeNA, - provider: selectors.provider || null, - buyer: selectors.soldTo || null, - pedimento_code: selectors.pedimentoKey || null, - report_type: config.reportType === 'normal' ? 'Normal' : 'Detallado', - currency_type: config.currency === 'foreign' ? 'ME' : 'MN', - exchange_rate_type: config.exchangeRate === 'invoice_date' ? 'FF' : 'FP', - is_shelter: config.shelter, - operation_type - }; - - const response = await invoiceMovementsApi.getAllMovements(allMovementsFilter); - - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) { - results = response.data; - showResults = true; - } - - toast.success(`Se encontraron ${results.length} movimientos`); - return; // Salir temprano, no ejecutar la lógica individual + if (response.error) { + toast.error(response.error); + return; } - const baseFilter: Omit = { - range_type: dates.type === 'invoice' ? 'FF' : 'FP', - start_date: formatDateToYYYYMMDD(dates.from), - end_date: formatDateToYYYYMMDD(dates.to), - include_cancelled: filters.includeNA, - provider: selectors.provider || null, - buyer: selectors.soldTo || null, - pedimento_code: selectors.pedimentoKey || null, - report_type: config.reportType === 'normal' ? 'Normal' : 'Detallado', - currency_type: config.currency === 'foreign' ? 'ME' : 'MN', - exchange_rate_type: config.exchangeRate === 'invoice_date' ? 'FF' : 'FP', - is_shelter: config.shelter - }; + if (response.data) { + results = response.data; + showResults = true; - const allResults: (MovementItem | MovementItemDetailed)[] = []; - - // Importaciones Temporales (IMTEM) - if (types.import.TEM) { - toast.info('Obteniendo importaciones temporales...'); - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getTemporaryImports({ - ...baseFilter, - database_name: 'default' - }) - : await invoiceMovementsApi.getTemporaryImportsDetailed({ - ...baseFilter, - database_name: 'default' - }); - - if (response.error) { - toast.error(response.error); - return; + if (results.length === 0) { + toast.warning('No se encontraron resultados con los filtros seleccionados'); + } else { + toast.success(`${results.length} registros cargados en vista previa`); } - - if (response.data) allResults.push(...response.data); } + } catch (error: any) { + console.error('Error generando vista previa:', error); + toast.error(error.message || 'Error al generar la vista previa'); + } finally { + loading = false; + } + } - // Importaciones Definitivas (IMPDF) o COMEX - if (types.import.DEF) { - toast.info('Obteniendo importaciones definitivas...'); - const movementType = types.other.COMEX ? 'COMEX' : 'IMPDF'; - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getDefinitiveImports({ - ...baseFilter, - database_name: 'default', - movement_type: movementType - }) - : await invoiceMovementsApi.getDefinitiveImportsDetailed({ - ...baseFilter, - database_name: 'default', - movement_type: movementType - }); + // Helper para construir el filtro (extraído de la lógica anterior) + function buildAllMovementsFilter(): AllMovementsFilter | null { + // Validaciones + const dateValidation = validateDates(); + if (!dateValidation.valid) { + toast.error(`Error: ${dateValidation.message}`); + return null; + } + const movementValidation = validateMovementTypes(); + if (!movementValidation.valid) { + toast.error(`Error: ${movementValidation.message}`); + return null; + } + const businessValidation = validateBusinessRules(); + if (!businessValidation.valid) { + toast.error(`Error: ${businessValidation.message}`); + return null; + } - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) allResults.push(...response.data); - } - - // Importaciones de Reparación (IMPRE) - if (types.import.REP) { - toast.info('Obteniendo importaciones de reparación...'); - const dischargeFilter = - filters.downloaded === 'downloaded' - ? 'SiDes' - : filters.downloaded === 'not_downloaded' - ? 'NoDes' - : 'ALL'; - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getRepairImports({ - ...baseFilter, - database_name: 'default', - discharge_filter: dischargeFilter - }) - : await invoiceMovementsApi.getRepairImportsDetailed({ - ...baseFilter, - database_name: 'default', - discharge_filter: dischargeFilter - }); - - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) allResults.push(...response.data); - } - - // Exportaciones Definitivas (incluye VEMEX) - if ( + const allMovementsFilter: AllMovementsFilter = { + range_type: dates.type === 'invoice' ? 'FF' : 'FP', + start_date: formatDateToYYYYMMDD(dates.from), + end_date: formatDateToYYYYMMDD(dates.to), + include_cancelled: filters.includeNA, + provider: selectors.provider || null, + buyer: selectors.soldTo || null, + pedimento_code: selectors.pedimentoKey || null, + report_type: config.reportType === 'normal' ? 'Normal' : 'Detallado', + currency_type: config.currency === 'foreign' ? 'ME' : 'MN', + exchange_rate_type: config.exchangeRate === 'invoice_date' ? 'FF' : 'FP', + is_shelter: config.shelter, + // Granular flags + import_temp: !!types.import.TEM, + import_def: !!types.import.DEF, + import_rep: !!types.import.REP, + export_def: !!( types.export.main.DEF || types.other.VEMEX || types.export.additional.TODAS || Object.values(types.export.additional).some((v) => v) - ) { - toast.info('Obteniendo exportaciones...'); + ), + export_rep: !!types.export.main.REP, + send_email: config.sendEmail + }; - // Determinar tipo de movimiento basado en checkboxes adicionales - let movementType: any = 'ALL'; - if (types.export.additional.AFIJO) movementType = 'AFIJO'; - else if (types.export.additional.NODES) movementType = 'NODES'; - else if (types.export.additional.SCRAP) movementType = 'SCRAP'; - else if (types.export.additional.REEXP) movementType = 'REEXP'; - else if (types.export.additional.DONAC) movementType = 'DONAC'; - else if (types.other.VEMEX) movementType = 'VEMEX'; + // Override flags if "TODAS" is selected + if (types.other.TODAS) { + allMovementsFilter.import_temp = true; + allMovementsFilter.import_def = true; + allMovementsFilter.import_rep = true; + allMovementsFilter.export_def = true; + allMovementsFilter.export_rep = true; + allMovementsFilter.operation_type = null; + } else if (types.export.additional.TODAS) { + allMovementsFilter.import_temp = false; + allMovementsFilter.import_def = false; + allMovementsFilter.import_rep = false; + allMovementsFilter.export_def = true; + allMovementsFilter.export_rep = true; + allMovementsFilter.operation_type = 'exp'; + } else { + const hasImports = + allMovementsFilter.import_temp || + allMovementsFilter.import_def || + allMovementsFilter.import_rep; + const hasExports = allMovementsFilter.export_def || allMovementsFilter.export_rep; - const dischargeFilter = - filters.downloaded === 'downloaded' - ? 'SiDes' - : filters.downloaded === 'not_downloaded' - ? 'NoDes' - : 'ALL'; - - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getExports({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter, - use_transport_method: false - }) - : await invoiceMovementsApi.getExportsDetailed({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter, - use_transport_method: false - }); - - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) allResults.push(...response.data); + if (hasImports && hasExports) { + allMovementsFilter.operation_type = null; + } else if (hasImports) { + allMovementsFilter.operation_type = 'imp'; + } else if (hasExports) { + allMovementsFilter.operation_type = 'exp'; } - - // Exportaciones de Reparación - if (types.export.main.REP || types.export.additional.TODAS) { - toast.info('Obteniendo exportaciones de reparación...'); - - // Para reparaciones solo aplican AFIJO y NODES - let movementType: any = 'ALL'; - if (types.export.additional.AFIJO) movementType = 'AFIJO'; - else if (types.export.additional.NODES) movementType = 'NODES'; - - const dischargeFilter = - filters.downloaded === 'downloaded' - ? 'SiDes' - : filters.downloaded === 'not_downloaded' - ? 'NoDes' - : 'ALL'; - - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getExportRepairs({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter - }) - : await invoiceMovementsApi.getExportRepairsDetailed({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter - }); - - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) allResults.push(...response.data); - } - - // Cambio de Régimen (CREG) - Exportaciones con cambio de régimen - if (types.export.main.CREG) { - toast.info('Obteniendo cambios de régimen...'); - - // Para cambio de régimen solo aplican AFIJO y SCRAP - let movementType: any = 'ALL'; - if (types.export.additional.AFIJO) movementType = 'AFIJO'; - else if (types.export.additional.SCRAP) movementType = 'SCRAP'; - - const dischargeFilter = - filters.downloaded === 'downloaded' - ? 'SiDes' - : filters.downloaded === 'not_downloaded' - ? 'NoDes' - : 'ALL'; - - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getExports({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter, - use_transport_method: false - }) - : await invoiceMovementsApi.getExportsDetailed({ - ...baseFilter, - database_name: 'default', - movement_type: movementType, - discharge_filter: dischargeFilter, - use_transport_method: false - }); - if (response.data) allResults.push(...response.data); - } - - // CREGEXP (Cambio Régimen Export) - Caso especial - if (types.other.CREGEXP) { - toast.info('Obteniendo cambios de régimen export...'); - - const dischargeFilter = - filters.downloaded === 'downloaded' - ? 'SiDes' - : filters.downloaded === 'not_downloaded' - ? 'NoDes' - : 'ALL'; - - const response = - config.reportType === 'normal' - ? await invoiceMovementsApi.getExports({ - ...baseFilter, - database_name: 'default', - movement_type: 'ALL', - discharge_filter: dischargeFilter, - use_transport_method: false - }) - : await invoiceMovementsApi.getExportsDetailed({ - ...baseFilter, - database_name: 'default', - movement_type: 'ALL', - discharge_filter: dischargeFilter, - use_transport_method: false - }); - - if (response.error) { - toast.error(response.error); - return; - } - - if (response.data) allResults.push(...response.data); - } - - results = allResults; - showResults = true; - - // Ordenar resultados según configuración y modo de reporte - if (config.reportType === 'normal') { - // LLENADOCSVNORMAL - SORT con 3 campos - if (config.shelter) { - results.sort((a, b) => { - if (a.BaseDeDatos !== b.BaseDeDatos) return a.BaseDeDatos.localeCompare(b.BaseDeDatos); - if (a.TipoMovTemDef !== b.TipoMovTemDef) - return a.TipoMovTemDef.localeCompare(b.TipoMovTemDef); - return (a.FechaFactura || '').localeCompare(b.FechaFactura || ''); - }); - } else { - results.sort((a, b) => { - if (a.TipoMovTemDef !== b.TipoMovTemDef) - return a.TipoMovTemDef.localeCompare(b.TipoMovTemDef); - if ((a.FechaFactura || '') !== (b.FechaFactura || '')) - return (a.FechaFactura || '').localeCompare(b.FechaFactura || ''); - return a.BaseDeDatos.localeCompare(b.BaseDeDatos); - }); - } - } else { - // LLENADOCSVDETALLADO - SORT más simple - if (config.shelter) { - results.sort((a, b) => { - if (a.BaseDeDatos !== b.BaseDeDatos) return a.BaseDeDatos.localeCompare(b.BaseDeDatos); - if (a.TipoMovTemDef !== b.TipoMovTemDef) - return a.TipoMovTemDef.localeCompare(b.TipoMovTemDef); - return (a.FechaFactura || '').localeCompare(b.FechaFactura || ''); - }); - } else { - results.sort((a, b) => { - if (a.TipoMovTemDef !== b.TipoMovTemDef) - return a.TipoMovTemDef.localeCompare(b.TipoMovTemDef); - return (a.FechaFactura || '').localeCompare(b.FechaFactura || ''); - }); - } - } - - // Configurar título del reporte - reportTitle = 'REPORTE DE FACTURAS'; - - // Configurar etiqueta de moneda - if (config.currency === 'foreign') { - currencyLabel = 'Moneda: Dólares'; - } else if (config.currency === 'national') { - currencyLabel = 'Moneda: Pesos'; - } else { - currencyLabel = 'Moneda: Captura'; - } - - if (allResults.length === 0) { - toast.warning('No se encontraron resultados con los filtros seleccionados'); - } else { - toast.success(`Reporte generado exitosamente: ${allResults.length} registros encontrados`); - } - } catch (error: any) { - console.error('Error generando reporte:', error); - toast.error(error.message || 'Error al generar el reporte'); - } finally { - loading = false; } + + // Set discharge filter (Global) + const dischargeFilter = + filters.downloaded === 'downloaded' + ? 'SiDes' + : filters.downloaded === 'not_downloaded' + ? 'NoDes' + : 'ALL'; + allMovementsFilter.discharge_filter = dischargeFilter; + + return allMovementsFilter; + } + + async function handleGenerateReport() { + // Wrapper for compatibility if button still calls this + await generateReport(); } function downloadCSV() { @@ -1171,11 +1006,31 @@
- + { + const input = e.currentTarget; + if (input && typeof input.showPicker === 'function') { + input.showPicker(); + } + }} + />
- + { + const input = e.currentTarget; + if (input && typeof input.showPicker === 'function') { + input.showPicker(); + } + }} + />
@@ -1517,7 +1372,8 @@ +
+{/if} From 84b507fbba5a708466839bd865bf93078f810971 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 6 Feb 2026 17:57:58 -0600 Subject: [PATCH 11/54] feat: Enhance invoice movement reports by refactoring CSV generation with a filter object, expanding exported fields, improving formatting, and enabling direct download in the frontend. --- .../modules/a76/reports/movements/__init__.py | 0 .../reports/movements/invoices/csv_utils.py | 105 +++++++++++++----- .../a76/reports/movements/invoices/routes.py | 2 +- .../a76/reports/movements/invoices/tasks.py | 2 +- backend/requirements.txt | 4 +- docker-compose.yml | 16 +++ .../dashboard/reports/invoices/+page.svelte | 43 ++++++- 7 files changed, 137 insertions(+), 35 deletions(-) create mode 100644 backend/api/v1/modules/a76/reports/movements/__init__.py diff --git a/backend/api/v1/modules/a76/reports/movements/__init__.py b/backend/api/v1/modules/a76/reports/movements/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py index 004b7ae4..2c91af6d 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py @@ -6,32 +6,42 @@ import io from typing import List, Union from datetime import datetime -from .schemas import MovementItem, MovementItemDetailed +from .schemas import MovementItem, MovementItemDetailed, AllMovementsFilter def generate_csv_from_movements( movements: List[Union[MovementItem, MovementItemDetailed]], - report_type: str = "normal" + filters: AllMovementsFilter ) -> str: """ Generate CSV content from movement items. Args: movements: List of movement items (normal or detailed) - report_type: "normal" or "detailed" + filters: Filter object containing report parameters Returns: CSV content as string """ output = io.StringIO() - if report_type.lower() == "normal": - # Normal report columns + if filters.report_type.value.lower() == "normal": + # Normal report - only fields that are actually populated fieldnames = [ - 'Pedimento', 'ClavePed', 'Factura', 'FechaFactura', - 'ValorComercialMN', 'TipoMovTemDef', 'Estatus', 'BaseDeDatos', - 'TipoCambio', 'Fecha_Pago', 'ValorMPTemp', 'ValorAgre', - 'TipoExpo', 'EsCambioRegimen', 'Regimen' + # Identification + 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', + # Values + 'ValorComercialMN', 'ValorMPTemp', 'TipoCambio', 'ValorAgre', + # Classification + 'TipoMovTemDef', 'Estatus', 'TipoExpo', 'EsCambioRegimen', + # Dates + 'Fecha_Pago', + # References + 'PedimentoR1', 'EDocument', 'NumOperacionVU', + # Logistics + 'NumCaja', 'NumGafUni', 'AduanaCru', + # Metadata + 'BaseDeDatos', 'UsuarioCap', 'UsuarioAcr' ] writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') @@ -40,21 +50,45 @@ def generate_csv_from_movements( for movement in movements: row = movement.model_dump() # Format datetime fields - if row.get('FechaFactura'): - row['FechaFactura'] = _format_datetime(row['FechaFactura']) - if row.get('Fecha_Pago'): - row['Fecha_Pago'] = _format_datetime(row['Fecha_Pago']) + row['FechaFactura'] = _format_datetime(row.get('FechaFactura')) + row['Fecha_Pago'] = _format_datetime(row.get('Fecha_Pago')) + + # Format numeric fields + row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) + row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) + row['ValorMPTemp'] = _format_decimal(row.get('ValorMPTemp')) + row['ValorAgre'] = _format_decimal(row.get('ValorAgre')) + writer.writerow(row) else: - # Detailed report columns + # Detailed report - only fields that are actually populated fieldnames = [ - 'Linea', 'Pedimento', 'Factura', 'FechaFactura', - 'Proveedor', 'VendidoA', 'CantidadIE', 'DescripcionE', - 'DescripcionI', 'NumParte', 'UniMed', 'ValorComercialMN', - 'TipoMovTemDef', 'ClavePed', 'Estatus', 'TipoCambio', - 'PesoNeto', 'PesoBruto', 'OrdenCompraVenta', 'Regimen', - 'AgenteAduanal', 'Patente', 'BaseDeDatos' + # Identification + 'Linea', 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', + # Parties (names only, no RFC/TaxID as they're not in queries) + 'Proveedor', 'VendidoA', + # Product + 'NumParte', 'DescripcionE', 'DescripcionI', 'CantidadIE', 'UniMed', + # Classification + 'FraccionArancelaria', 'FraccionAmericana', 'ECCN', 'Sector', 'PaisOrigen', + # Values + 'ValorComercialMN', 'TipoCambio', 'PesoNeto', 'PesoBruto', + # Customs + 'TipoMovTemDef', 'Regimen', 'Aduana', 'Advalorem', 'Preferencia', + # Customs Broker + 'AgenteAduanal', 'Patente', + # References + 'OrdenCompraVenta', 'Remesa', 'PedimentoR1', 'EDocument', 'NumOperacionVU', + # Identifiers + 'Series', 'Marca', 'Modelo', 'SimboloEx', + # Dates + 'Fecha_Pago', 'Fecha_Inicio', 'Fecha_Fin', 'FechaEmision', + # Logistics + 'Transportista', 'NumCaja', 'NumGafUni', 'AduanaCru', 'Lote', + # Metadata + 'Estatus', 'BaseDeDatos', 'TipoExpo', 'EsCambioRegimen', 'Pedimento18', + 'UsuarioCap', 'UsuarioAcr' ] writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') @@ -63,14 +97,19 @@ def generate_csv_from_movements( for movement in movements: row = movement.model_dump() # Format datetime fields - if row.get('FechaFactura'): - row['FechaFactura'] = _format_datetime(row['FechaFactura']) - if row.get('Fecha_Pago'): - row['Fecha_Pago'] = _format_datetime(row['Fecha_Pago']) - if row.get('Fecha_Inicio'): - row['Fecha_Inicio'] = _format_datetime(row['Fecha_Inicio']) - if row.get('Fecha_Fin'): - row['Fecha_Fin'] = _format_datetime(row['Fecha_Fin']) + row['FechaFactura'] = _format_datetime(row.get('FechaFactura')) + row['Fecha_Pago'] = _format_datetime(row.get('Fecha_Pago')) + row['Fecha_Inicio'] = _format_datetime(row.get('Fecha_Inicio')) + row['Fecha_Fin'] = _format_datetime(row.get('Fecha_Fin')) + row['FechaEmision'] = _format_datetime(row.get('FechaEmision')) + + # Format numeric fields + row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) + row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) + row['CantidadIE'] = _format_decimal(row.get('CantidadIE')) + row['PesoNeto'] = _format_decimal(row.get('PesoNeto')) + row['PesoBruto'] = _format_decimal(row.get('PesoBruto')) + writer.writerow(row) csv_content = output.getvalue() @@ -85,3 +124,13 @@ def _format_datetime(dt) -> str: elif isinstance(dt, str): return dt return '' + + +def _format_decimal(value, decimals: int = 2) -> str: + """Format decimal values for CSV export.""" + if value is None: + return '' + try: + return f"{float(value):.{decimals}f}" + except (ValueError, TypeError): + return str(value) if value else '' diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py index 0d406f07..351e4d9e 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py @@ -652,7 +652,7 @@ async def get_all_movements( # Generate CSV csv_content = generate_csv_from_movements( movements=movements, - report_type=filters.report_type.value.lower() + filters=filters ) # Generate filename diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py index a2de6aef..47114e98 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py @@ -40,7 +40,7 @@ def generate_invoice_movements_async(self, filter_data: Dict[str, Any], user_ema # 4. Generate CSV csv_content = generate_csv_from_movements( movements=movements, - report_type=filters.report_type.value.lower() + filters=filters ) # 5. Send Email if requested diff --git a/backend/requirements.txt b/backend/requirements.txt index d21c8780..7480be9f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -50,4 +50,6 @@ redis==5.0.1 flower==2.0.1 # Barcode -pdf417gen==0.8.1asgiref==3.8.1 +pdf417gen==0.8.1 +asgiref==3.8.1 +aiosmtplib==3.0.1 diff --git a/docker-compose.yml b/docker-compose.yml index 041c1bdf..a6dc68de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -272,12 +272,28 @@ services: container_name: worker command: celery -A core.celery_app worker --loglevel=info environment: + - DEBUG=${DEBUG:-True} + - ENVIRONMENT=${ENVIRONMENT:-development} + - PYTHONUNBUFFERED=1 + - PYTHONDONTWRITEBYTECODE=1 + - CORE_DB_HOST=${CORE_DB_HOST:-postgres-a76} + - CORE_DB_PORT=${CORE_DB_PORT:-5432} + - CORE_DB_NAME=${CORE_DB_NAME:-anexo76_core} + - CORE_DB_USER=${CORE_DB_USER:-postgres} + - CORE_DB_PASSWORD=${POSTGRES_APP_PASSWORD:-postgres} + - KEYCLOAK_SERVER_URL=${KEYCLOAK_SERVER_URL:-http://keycloak:8080/kcauth} + - KEYCLOAK_REALM=${KEYCLOAK_REALM:-master} + - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID:-anexo76-backend} + - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-dev-secret} - VALKEY_URL=redis://valkey:6379/0 depends_on: - backend - valkey networks: - backend-net + volumes: + - ./backend:/app + valkey: image: valkey/valkey:7.2 diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte index 33bc86c2..97dff1c6 100644 --- a/frontend/src/routes/dashboard/reports/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -402,10 +402,45 @@ if (statusData.status === 'SUCCESS') { clearInterval(pollInterval); loading = false; - toast.success( - 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', - { id: toastId } - ); + + // Download the file automatically + if (statusData.result?.content) { + try { + // Decode base64 content + const base64Content = statusData.result.content; + const binaryString = atob(base64Content); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + + // Create blob and download + const blob = new Blob([bytes], { type: 'text/csv;charset=utf-8;' }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = statusData.result.file_name || 'reporte_facturas.csv'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(url); + + toast.success('Reporte generado y descargado. También se ha enviado por correo.', { + id: toastId + }); + } catch (downloadErr) { + console.error('Error downloading file:', downloadErr); + toast.success( + 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', + { id: toastId } + ); + } + } else { + toast.success( + 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', + { id: toastId } + ); + } } else if (statusData.status === 'FAILURE') { clearInterval(pollInterval); loading = false; From 893c154b851ac6aba801a2f3fc07bd1a678e2940 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Mon, 9 Feb 2026 12:57:20 -0600 Subject: [PATCH 12/54] feat: Enhance invoice form data handling with new fields and improve invoice report export filter logic and UI. --- .../reports/movements/invoices/csv_utils.py | 2 +- .../invoices/edit/invoice-top-fields.svelte | 386 ++++++++++-------- .../invoices/edit/others-tab-form.svelte | 86 ++-- .../dashboard/invoices/edit/save-invoice.ts | 29 +- .../dashboard/reports/invoices/+page.svelte | 116 +++--- 5 files changed, 348 insertions(+), 271 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py index 2c91af6d..4ac1a3c8 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py @@ -120,7 +120,7 @@ def generate_csv_from_movements( def _format_datetime(dt) -> str: """Format datetime for CSV export.""" if isinstance(dt, datetime): - return dt.strftime('%Y-%m-%d %H:%M:%S') + return dt.strftime('%Y-%m-%d') elif isinstance(dt, str): return dt return '' diff --git a/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte b/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte index e3549f05..52de9150 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte @@ -1,196 +1,224 @@ -
-
- - { - formData.operation_type = v; - }} - > - - - {formData.operation_type - ? (formData.operation_type === 'exp' ? 'Exp' : 'Imp') - : '...'} - - - - Exportación - Importación - - -
-
- - { - formData.invoice_type = v ?? ''; - }} - > - - - {formData.invoice_type - ? `${formData.invoice_type}` - : '...'} - - - - {#each invoiceTypes as type} - - {type.key} - {type.description} - - {/each} - - -
+
+
+ + { + formData.operation_type = v; + }} + > + + + {formData.operation_type ? (formData.operation_type === 'exp' ? 'Exp' : 'Imp') : '...'} + + + + Exportación + Importación + + +
+
+ + { + formData.invoice_type = v ?? ''; + }} + > + + + {formData.invoice_type ? `${formData.invoice_type}` : '...'} + + + + {#each invoiceTypes as type} + + {type.key} - {type.description} + + {/each} + + +
-
- - { - formData.is_pedimento_pending = checked; - }} - /> -
-
- - { - formData.pedimento_id = v ? parseInt(v) : null; - if (v) { - handlePedimentoChange(v); - } - }} - > - - - {formData.pedimento || 'Selecciona pedimento...'} - - - - {#each pedimentos as pedimento} - - {pedimento.customs_office?.slice(0, 2)}-{pedimento.license}-{pedimento.pedimento_number} - - {/each} - - -
+
+ + { + formData.is_pedimento_pending = checked; + }} + /> +
+
+ + { + formData.pedimento_id = v ? parseInt(v) : null; + if (v) { + handlePedimentoChange(v); + } + }} + > + + + {formData.pedimento || 'Selecciona pedimento...'} + + + + {#each pedimentos as pedimento} + + {pedimento.customs_office?.slice(0, 2)}-{pedimento.license}-{pedimento.pedimento_number} + + {/each} + + +
-
- - -
+
+ + +
-
- - -
+
+ + +
-
- - -
+
+ + +
-
- - -
+
+ + +
+ +
+ + +
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte index c08d1e4f..ca7219fe 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte @@ -10,12 +10,12 @@ import { Plus, Upload } from 'lucide-svelte'; import type { Invoice } from '$lib/api/dashboard/a76/invoices'; - let { + let { invoice, formData = $bindable(), exists = $bindable(), transportModes = [] - }: { + }: { invoice: Invoice | null; formData?: any; exists?: boolean; @@ -36,11 +36,14 @@ electronic_signature: invoice.compliance_mx?.electronic_signature || '', mandatory_person: '', contingency_mode: invoice.compliance_mx?.contingency_mode || false, - cove: invoice.compliance_mx?.origin_destination_cove || '', + cove: invoice.compliance_mx?.edocument || '', operation_num: invoice.compliance_mx?.vucem_operation_num || '', adendas: invoice.compliance_mx?.addendum_vu || '', observations_vu: invoice.vu_observations || '', - certified_number: invoice.compliance_mx?.certificate_number || '', + certified_number: invoice.compliance_mx?.certificate_number || '', + entry_exit_date: invoice.logistics?.entry_exit_date || '', + payment_date: invoice.logistics?.payment_date || '', + delivery_date: invoice.logistics?.delivery_date || '' }; exists = true; } else if (!formData) { @@ -61,7 +64,10 @@ operation_num: '', adendas: '', observations_vu: '', - certified_number: '', + certified_number: '', + entry_exit_date: '', + payment_date: '', + delivery_date: '' }; exists = false; } @@ -70,7 +76,6 @@ let rfc = $state(''); let curp = $state(''); - function loadInfo() { // Función para cargar información console.log('Cargar información'); @@ -78,18 +83,18 @@
-
- +
- formData.transport_mode = value || 'TRUCK'} + (formData.transport_mode = value || 'TRUCK')} > - {transportModes.find(m => m.key === formData.transport_mode)?.name || 'Seleccionar modo'} + {transportModes.find((m) => m.key === formData.transport_mode)?.name || + 'Seleccionar modo'} {#each transportModes as mode} @@ -116,9 +121,9 @@
- formData.is_mixed = v === 'yes'} + (formData.is_mixed = v === 'yes')} class="flex gap-4" >
@@ -131,7 +136,7 @@
-
+
@@ -145,22 +150,18 @@ +
+ + +
+
+ {:else} +
+
+

{selectedArticle.title}

+ {#if isAdmin} + + {/if} +
+
+ {@html renderMarkdown(selectedArticle.content)} +
+
+ {/if} +
+ {/if} +
+ + + + diff --git a/frontend/src/lib/components/sidebar/modules.ts b/frontend/src/lib/components/sidebar/modules.ts index 887ba8bc..672cf07b 100644 --- a/frontend/src/lib/components/sidebar/modules.ts +++ b/frontend/src/lib/components/sidebar/modules.ts @@ -503,7 +503,7 @@ export function getSidebarData(): SidebarData { }, { name: m["sidebar.reference_data.ayuda"](), - url: "#", + url: "/dashboard/help-center", icon: Frame, }, ], diff --git a/frontend/src/lib/components/sidebar/nav-projects.svelte b/frontend/src/lib/components/sidebar/nav-projects.svelte index f67a27e2..15f67eb9 100644 --- a/frontend/src/lib/components/sidebar/nav-projects.svelte +++ b/frontend/src/lib/components/sidebar/nav-projects.svelte @@ -1,15 +1,16 @@ - + +
+ +
+
+

Centro de Ayuda

+

Gestiona la base de conocimientos distribuida.

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ {#if loading} +
+ +
+ {:else if filteredArticles.length === 0} + + +

No se encontraron artículos.

+
+
+ {:else} +
+ {#each filteredArticles as article} + + +
+ {article.title} +
+ + +
+
+ + Slug: /{article.slug} + +
+ +
+ {@html article.content} +
+
+ + Edito: {article.last_editor} + {new Date(article.updated_at).toLocaleDateString()} + +
+ {/each} +
+ {/if} +
+
+ + + + + + Crear Artículo + + Completa los campos para añadir un nuevo artículo a la base de conocimientos. + + +
+
+ + +
+
+ + +
+
+ + + + + +
+ + + {#if showPreview} +
+
+ {@html renderMarkdown(content)} +
+
+ {/if} + +
+
diff --git a/scripts/frontend-entrypoint.sh b/scripts/frontend-entrypoint.sh index bb2f0a33..f5ca66e3 100755 --- a/scripts/frontend-entrypoint.sh +++ b/scripts/frontend-entrypoint.sh @@ -40,5 +40,11 @@ echo "==========================================" echo "Iniciando aplicación SvelteKit..." echo "==========================================" +# Instalar dependencias nuevas si package.json ha cambiado +if [ "$NODE_ENV" = "development" ]; then + echo "Instalando dependencias (development mode)..." + pnpm install +fi + # Ejecutar el comando que se pasó al contenedor exec "$@" From 3b320d73812c2dc4f9bb661c1803841b92e0040a Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 19 Feb 2026 14:35:01 -0600 Subject: [PATCH 18/54] Agregando archivito --- scripts/frontend-entrypoint.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/frontend-entrypoint.sh b/scripts/frontend-entrypoint.sh index f5ca66e3..9a431440 100755 --- a/scripts/frontend-entrypoint.sh +++ b/scripts/frontend-entrypoint.sh @@ -43,7 +43,8 @@ echo "==========================================" # Instalar dependencias nuevas si package.json ha cambiado if [ "$NODE_ENV" = "development" ]; then echo "Instalando dependencias (development mode)..." - pnpm install + # CI=true evita el error ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY + CI=true pnpm install fi # Ejecutar el comando que se pasó al contenedor From 7b704e074471b70f42226a48cc88208a5bf58a3a Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 20 Feb 2026 10:00:22 -0600 Subject: [PATCH 19/54] feat: fix R1 pedimento duplication and improve invoice report exports - Fix bidirectional R1 resolution in all report query builders (Temporary, Definitive, Repair, Export, ExportRepair): use JOIN on pedimento_rectification_origin in both directions so the rectified pedimento number is resolved correctly and not duplicated. - Restore original CSV export format (ValorComercialMN, ValorMPTemp, ValorAgre as separate columns); compute them from item_line_financials SUM instead of invoice-level header totals which were always 0. - Rename CSV column "PEDIMENTO RECTIFICACION" to "PEDIMENTO R1" in both backend csv_utils.py and frontend manual download. - Harden temporary invoice update validator to safely handle null compliance_mx / logistics objects without crashing. - Add R1 rectification fields (es_rectificacion, pedimento_original, etc.) to the pedimento other-data form and initialize their default state. - Remove default companyId parameter from pedimentosApi methods to avoid hardcoded company ID 1. - Minor: whitespace cleanup, error handler adjustments, keyboard manager fix. --- .../imports/temporary/validators/update.py | 254 +++++++------- .../api/v1/modules/a76/invoices/services.py | 40 ++- .../models/pedimento_rectification_origin.py | 28 +- .../pedimento_rectification_destination.py | 1 + .../pedimento_rectification_origin.py | 1 + .../a76/pedmientos/services/pedimentos.py | 46 ++- .../reports/movements/invoices/csv_utils.py | 67 ++-- .../invoices/services/database_helpers.py | 76 ++--- .../movements/invoices/services/definitive.py | 4 +- .../movements/invoices/services/export.py | 2 +- .../invoices/services/export_repair.py | 155 +++++---- .../invoices/services/query_builders.py | 163 +++++++-- .../movements/invoices/services/repair.py | 6 +- .../movements/invoices/services/temporary.py | 17 +- backend/core/error_handlers.py | 21 +- .../src/lib/api/dashboard/a76/invoices.ts | 1 + .../src/lib/api/dashboard/a76/pedimentos.ts | 22 +- .../invoices/edit/others-tab-form.svelte | 1 - .../edit/other-data-tab-form.svelte | 313 +++++++++--------- .../keyboard/KeyboardManager.svelte | 1 + .../routes/dashboard/invoices/+page.svelte | 46 ++- .../dashboard/invoices/edit/[id]/+page.svelte | 27 +- .../routes/dashboard/pedimentos/+page.svelte | 39 ++- .../pedimentos/edit/[id]/+page.svelte | 108 +++++- .../dashboard/reports/invoices/+page.svelte | 4 +- 25 files changed, 919 insertions(+), 524 deletions(-) diff --git a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py index 9c254a9b..ac85ff24 100644 --- a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py +++ b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py @@ -36,17 +36,17 @@ def validate_update( # Validar campos requeridos según el tipo de operación invoice_dict = { - 'provider_id': invoice_data.compliance_mx.provider_id if invoice_data.compliance_mx else None, - 'sold_to_id': invoice_data.compliance_mx.sold_to_id if invoice_data.compliance_mx else None, - 'sold_to_header': invoice_data.compliance_mx.sold_to_header if invoice_data.compliance_mx else None, - 'shipped_to_id': invoice_data.compliance_mx.shipped_to_id if invoice_data.compliance_mx else None, - 'customs_broker_id': invoice_data.compliance_mx.customs_broker_id if invoice_data.compliance_mx else None, - 'pedimento_id': invoice_data.compliance_mx.pedimento_id if invoice_data.compliance_mx else None, + 'provider_id': invoice_data.compliance_mx.provider_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None), + 'sold_to_id': invoice_data.compliance_mx.sold_to_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None), + 'sold_to_header': invoice_data.compliance_mx.sold_to_header if invoice_data.compliance_mx else (existing_invoice.compliance_mx.sold_to_header if existing_invoice.compliance_mx else None), + 'shipped_to_id': invoice_data.compliance_mx.shipped_to_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None), + 'customs_broker_id': invoice_data.compliance_mx.customs_broker_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None), + 'pedimento_id': invoice_data.compliance_mx.pedimento_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None), } validate_required_fields_by_operation( invoice_data=invoice_dict, - operation_type=invoice_data.operation_type or 'IMP', + operation_type=invoice_data.operation_type or (existing_invoice.operation_type or 'imp'), errors=errors ) @@ -57,34 +57,36 @@ def validate_update( # Siguiendo la lógica del código Clarion original # Columna A: Pedimento (si no viene en CSV, usar el existente) - if invoice_data.compliance_mx.pedimento_id: - invoice_data.compliance_mx.pedimento_id = invoice_data.compliance_mx.pedimento_id - else: - invoice_data.compliance_mx.pedimento_id = existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.pedimento_id: + invoice_data.compliance_mx.pedimento_id = invoice_data.compliance_mx.pedimento_id + else: + invoice_data.compliance_mx.pedimento_id = existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None # Columna B: Remesa - if invoice_data.compliance_mx.remesa: - invoice_data.compliance_mx.remesa = invoice_data.compliance_mx.remesa - else: - invoice_data.compliance_mx.remesa = existing_invoice.compliance_mx.remesa if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.remesa: + invoice_data.compliance_mx.remesa = invoice_data.compliance_mx.remesa + else: + invoice_data.compliance_mx.remesa = existing_invoice.compliance_mx.remesa if existing_invoice.compliance_mx else None # Columna C: Factura (OBLIGATORIO) - invoice_data.invoice_number = clean_str(invoice_data.invoice_number) - if not invoice_data.invoice_number: - errors.add_required_error("invoice_number") + if invoice_data.invoice_number is not None: + invoice_data.invoice_number = clean_str(invoice_data.invoice_number) + if not invoice_data.invoice_number: + errors.add_required_error("invoice_number") + else: + invoice_data.invoice_number = existing_invoice.invoice_number # Columna D: Fecha - if invoice_data.invoice_date: - invoice_data.invoice_date = invoice_data.invoice_date - else: + if not invoice_data.invoice_date: invoice_data.invoice_date = existing_invoice.invoice_date # Columna E: Tipo Cambio - if invoice_data.financials and invoice_data.financials.exchange_rate is not None: - invoice_data.financials.exchange_rate = invoice_data.financials.exchange_rate - else: - if existing_invoice.financials: - invoice_data.financials.exchange_rate = existing_invoice.financials.exchange_rate + if invoice_data.financials: + if invoice_data.financials.exchange_rate is None: + if existing_invoice.financials: + invoice_data.financials.exchange_rate = existing_invoice.financials.exchange_rate # Columna F: Régimen if invoice_data.document_type: @@ -93,157 +95,161 @@ def validate_update( invoice_data.document_type = existing_invoice.document_type # Columna G: Clave Proveedor - if invoice_data.compliance_mx and invoice_data.compliance_mx.provider_id is not None: - invoice_data.compliance_mx.provider_id = invoice_data.compliance_mx.provider_id - else: - invoice_data.compliance_mx.provider_id = existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.provider_id is None: + invoice_data.compliance_mx.provider_id = existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None # Columna H: Clave Vendido A - if invoice_data.compliance_mx and invoice_data.compliance_mx.sold_to_id is not None: - invoice_data.compliance_mx.sold_to_id = invoice_data.compliance_mx.sold_to_id - else: - invoice_data.compliance_mx.sold_to_id = existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.sold_to_id is None: + invoice_data.compliance_mx.sold_to_id = existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None # Columna I: Clave Enviado A - if invoice_data.compliance_mx and invoice_data.compliance_mx.shipped_to_id is not None: - invoice_data.compliance_mx.shipped_to_id = invoice_data.compliance_mx.shipped_to_id - else: - invoice_data.compliance_mx.shipped_to_id = existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.shipped_to_id is None: + invoice_data.compliance_mx.shipped_to_id = existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None # Columna J: Clave A. Aduanal - if invoice_data.compliance_mx and invoice_data.compliance_mx.customs_broker_id is not None: - invoice_data.compliance_mx.customs_broker_id = invoice_data.compliance_mx.customs_broker_id - else: - invoice_data.compliance_mx.customs_broker_id = existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.customs_broker_id is None: + invoice_data.compliance_mx.customs_broker_id = existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None # Columna K: Clave Transportista - if invoice_data.logistics and invoice_data.logistics.carrier_id is not None: - invoice_data.logistics.carrier_id = invoice_data.logistics.carrier_id - else: - invoice_data.logistics.carrier_id = existing_invoice.logistics.carrier_id if existing_invoice.logistics else None + if invoice_data.logistics: + # Note: logistics in update schema seems to be a single object, but in model it's a list. + # This validator seems to expect a single object (InvoiceLogisticsUpdate). + # We'll stick to the existing logic but make it safe. + if hasattr(invoice_data.logistics, 'carrier_id') and invoice_data.logistics.carrier_id is None: + invoice_data.logistics.carrier_id = existing_invoice.logistics.carrier_id if existing_invoice.logistics else None # Columna L: Nombre Conductor - if invoice_data.logistics and invoice_data.logistics.driver_name: - invoice_data.logistics.driver_name = clean_str(invoice_data.logistics.driver_name) - else: - invoice_data.logistics.driver_name = existing_invoice.logistics.driver_name if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'driver_name') and not invoice_data.logistics.driver_name: + invoice_data.logistics.driver_name = existing_invoice.logistics.driver_name if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'driver_name'): + invoice_data.logistics.driver_name = clean_str(invoice_data.logistics.driver_name) # Columna M: Tipo Transporte - if invoice_data.logistics and invoice_data.logistics.transport_type: - invoice_data.logistics.transport_type = clean_str(invoice_data.logistics.transport_type) - else: - invoice_data.logistics.transport_type = existing_invoice.logistics.transport_type if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'transport_type') and not invoice_data.logistics.transport_type: + invoice_data.logistics.transport_type = existing_invoice.logistics.transport_type if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'transport_type'): + invoice_data.logistics.transport_type = clean_str(invoice_data.logistics.transport_type) # Columna N: Número de Transporte - if invoice_data.logistics and invoice_data.logistics.transport_num: - invoice_data.logistics.transport_num = clean_str(invoice_data.logistics.transport_num) - else: - invoice_data.logistics.transport_num = existing_invoice.logistics.transport_num if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'transport_num') and not invoice_data.logistics.transport_num: + invoice_data.logistics.transport_num = existing_invoice.logistics.transport_num if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'transport_num'): + invoice_data.logistics.transport_num = clean_str(invoice_data.logistics.transport_num) # Columna O: Tipo de Moneda - if invoice_data.financials and invoice_data.financials.currency: - invoice_data.financials.currency = clean_str(invoice_data.financials.currency).lower() - else: - invoice_data.financials.currency = existing_invoice.financials.currency if existing_invoice.financials else None + if invoice_data.financials: + if not invoice_data.financials.currency: + invoice_data.financials.currency = existing_invoice.financials.currency if existing_invoice.financials else None + else: + invoice_data.financials.currency = clean_str(invoice_data.financials.currency).lower() # Columna P: Clave Moneda - if invoice_data.financials and invoice_data.financials.currency_type: - invoice_data.financials.currency_type = clean_str(invoice_data.financials.currency_type).upper() - else: - invoice_data.financials.currency_type = existing_invoice.financials.currency_type if existing_invoice.financials else None + if invoice_data.financials: + if not invoice_data.financials.currency_type: + invoice_data.financials.currency_type = existing_invoice.financials.currency_type if existing_invoice.financials else None + else: + invoice_data.financials.currency_type = clean_str(invoice_data.financials.currency_type).upper() # Columna Q: Flete - if invoice_data.financials and invoice_data.financials.freight is not None: - invoice_data.financials.freight = invoice_data.financials.freight - else: - invoice_data.financials.freight = existing_invoice.financials.freight if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.freight is None: + invoice_data.financials.freight = existing_invoice.financials.freight if existing_invoice.financials else None # Columna R: Val Seguros - if invoice_data.financials and invoice_data.financials.insurance_value is not None: - invoice_data.financials.insurance_value = invoice_data.financials.insurance_value - else: - invoice_data.financials.insurance_value = existing_invoice.financials.insurance_value if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.insurance_value is None: + invoice_data.financials.insurance_value = existing_invoice.financials.insurance_value if existing_invoice.financials else None # Columna S: Seguros - if invoice_data.financials and invoice_data.financials.insurance is not None: - invoice_data.financials.insurance = invoice_data.financials.insurance - else: - invoice_data.financials.insurance = existing_invoice.financials.insurance if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.insurance is None: + invoice_data.financials.insurance = existing_invoice.financials.insurance if existing_invoice.financials else None # Columna T: Embalaje - if invoice_data.financials and invoice_data.financials.packaging is not None: - invoice_data.financials.packaging = invoice_data.financials.packaging - else: - invoice_data.financials.packaging = existing_invoice.financials.packaging if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.packaging is None: + invoice_data.financials.packaging = existing_invoice.financials.packaging if existing_invoice.financials else None # Columna U: Otros Incrementables - if invoice_data.financials and invoice_data.financials.other_increments is not None: - invoice_data.financials.other_increments = invoice_data.financials.other_increments - else: - invoice_data.financials.other_increments = existing_invoice.financials.other_increments if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.other_increments is None: + invoice_data.financials.other_increments = existing_invoice.financials.other_increments if existing_invoice.financials else None # Columna V: Incoterms - if invoice_data.logistics and invoice_data.logistics.incoterm: - invoice_data.logistics.incoterm = clean_str(invoice_data.logistics.incoterm).upper() - else: - invoice_data.logistics.incoterm = existing_invoice.logistics.incoterm if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'incoterm') and not invoice_data.logistics.incoterm: + invoice_data.logistics.incoterm = existing_invoice.logistics.incoterm if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'incoterm'): + invoice_data.logistics.incoterm = clean_str(invoice_data.logistics.incoterm).upper() # Columna W: Precinto - if invoice_data.logistics and invoice_data.logistics.seal_number: - invoice_data.logistics.seal_number = clean_str(invoice_data.logistics.seal_number) - else: - invoice_data.logistics.seal_number = existing_invoice.logistics.seal_number if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'seal_number') and not invoice_data.logistics.seal_number: + invoice_data.logistics.seal_number = existing_invoice.logistics.seal_number if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'seal_number'): + invoice_data.logistics.seal_number = clean_str(invoice_data.logistics.seal_number) # Columna X: Fecha de Emisión - if invoice_data.emission_date: - invoice_data.emission_date = invoice_data.emission_date - else: + if not invoice_data.emission_date: invoice_data.emission_date = existing_invoice.emission_date # Columna Y: Tipo de Peso (Opcional) - if invoice_data.logistics and invoice_data.logistics.weight_type: - invoice_data.logistics.weight_type = clean_str(invoice_data.logistics.weight_type).upper() - else: - invoice_data.logistics.weight_type = existing_invoice.logistics.weight_type if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'weight_type') and not invoice_data.logistics.weight_type: + invoice_data.logistics.weight_type = existing_invoice.logistics.weight_type if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'weight_type'): + invoice_data.logistics.weight_type = clean_str(invoice_data.logistics.weight_type).upper() # Columna Z: E-Document (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.edocument: - invoice_data.compliance_mx.edocument = clean_str(invoice_data.compliance_mx.edocument) - else: - invoice_data.compliance_mx.edocument = existing_invoice.compliance_mx.edocument if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.edocument: + invoice_data.compliance_mx.edocument = existing_invoice.compliance_mx.edocument if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.edocument = clean_str(invoice_data.compliance_mx.edocument) # Columna AA: Num. Operación (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.vucem_operation_num: - invoice_data.compliance_mx.vucem_operation_num = clean_str(invoice_data.compliance_mx.vucem_operation_num) - else: - invoice_data.compliance_mx.vucem_operation_num = existing_invoice.compliance_mx.vucem_operation_num if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.vucem_operation_num: + invoice_data.compliance_mx.vucem_operation_num = existing_invoice.compliance_mx.vucem_operation_num if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.vucem_operation_num = clean_str(invoice_data.compliance_mx.vucem_operation_num) # Columna AB: Aduana (OBLIGATORIO) - if invoice_data.compliance_mx and invoice_data.compliance_mx.aduana: - invoice_data.compliance_mx.aduana = clean_str(invoice_data.compliance_mx.aduana) - else: - invoice_data.compliance_mx.aduana = existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.aduana: + invoice_data.compliance_mx.aduana = existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.aduana = clean_str(invoice_data.compliance_mx.aduana) # Validar que aduana sea obligatorio (excepto para MEX) if existing_invoice.invoice_type != "MEX": - if not invoice_data.compliance_mx or not invoice_data.compliance_mx.aduana: + current_aduana = invoice_data.compliance_mx.aduana if invoice_data.compliance_mx else (existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None) + if not current_aduana: errors.add_required_error("aduana") # Columna AC: Sección de Despacho / Puerto de Entrada (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.port_of_entry: - invoice_data.compliance_mx.port_of_entry = clean_str(invoice_data.compliance_mx.port_of_entry) - else: - invoice_data.compliance_mx.port_of_entry = existing_invoice.compliance_mx.port_of_entry if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.port_of_entry: + invoice_data.compliance_mx.port_of_entry = existing_invoice.compliance_mx.port_of_entry if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.port_of_entry = clean_str(invoice_data.compliance_mx.port_of_entry) # Columna AD: Observación en Español (Opcional) - if invoice_data.observation_es: - invoice_data.observation_es = clean_str(invoice_data.observation_es) - else: + if not invoice_data.observation_es: invoice_data.observation_es = existing_invoice.observation_es + else: + invoice_data.observation_es = clean_str(invoice_data.observation_es) # Columna AD: Observación en Inglés (Opcional) - if invoice_data.observation_en: - invoice_data.observation_en = clean_str(invoice_data.observation_en) - else: + if not invoice_data.observation_en: invoice_data.observation_en = existing_invoice.observation_en + else: + invoice_data.observation_en = clean_str(invoice_data.observation_en) diff --git a/backend/api/v1/modules/a76/invoices/services.py b/backend/api/v1/modules/a76/invoices/services.py index f3b0681b..81cdecea 100644 --- a/backend/api/v1/modules/a76/invoices/services.py +++ b/backend/api/v1/modules/a76/invoices/services.py @@ -1,7 +1,9 @@ import traceback from typing import Optional, List, Tuple from sqlalchemy.orm import Session +from sqlalchemy import func from core.exceptions import ErrorCollector, DuplicateResourceException +from core.context import get_user_context from .common.mappers import clean_dict from .imports.temporary.validators.create import validate_create from .imports.temporary.validators.update import validate_update @@ -10,6 +12,26 @@ from .common.common_validators import invoice_exists from . import models, schemas +def _get_current_username() -> str: + """Helper to get current username from context or fallback to System""" + try: + context = get_user_context() + if context: + # Token usually has 'preferred_username' or 'name' or 'sub' + username = ( + context.get("preferred_username") + or context.get("email") + or context.get("sub") + or "System" + ) + print(f"DEBUG: _get_current_username found context: {username}") + return username + except Exception: + pass + print("DEBUG: _get_current_username NO context found, using System") + return "System" + + class InvoiceService: """Service for Invoice Header operations""" @@ -46,7 +68,7 @@ class InvoiceService: # Apply filters if provided if filters: if filters.get("status"): - query = query.filter(models.InvoiceHeader.status == filters["status"]) + query = query.filter(models.InvoiceHeader.is_updated == filters["status"]) if filters.get("operation_type"): query = query.filter( models.InvoiceHeader.operation_type == filters["operation_type"] @@ -129,6 +151,11 @@ class InvoiceService: invoice_dict["tenant_id"] = tenant_id invoice_dict["company_id"] = company_id + # Automatic status and audit fields + username = _get_current_username() + invoice_dict["capture_user"] = username + invoice_dict["who_updated"] = username + # Ensure document_type respects DB constraints for MEX invoices (bypass clean_dict) if invoice_dict.get("invoice_type") == "MEX" and not invoice_dict.get("document_type"): invoice_dict["document_type"] = None @@ -253,6 +280,7 @@ class InvoiceService: # Update main invoice header fields update_dict = invoice_data.model_dump( exclude={ + "id", "compliance_mx", "financials", "logistics", @@ -264,6 +292,16 @@ class InvoiceService: for key, value in update_dict.items(): setattr(invoice, key, value) + # Audit update fields + username = _get_current_username() + invoice.who_updated = username + invoice.updated_date = func.now() + + # Backfill capture_user if missing or previous generic 'System' + if not invoice.capture_user or invoice.capture_user == "System": + if username != "System": + invoice.capture_user = username + # Update compliance_mx if provided if invoice_data.compliance_mx is not None: if invoice.compliance_mx: diff --git a/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py b/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py index 9a5fda2f..66f92514 100644 --- a/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py +++ b/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py @@ -40,21 +40,21 @@ class PedimentoRectificationOrigin(Base, TenantScopedMixin, TimestampMixin): id: Mapped[int] = mapped_column(Integer) pedimento_id: Mapped[int] = mapped_column(Integer, nullable=False) - original_pedimento_year: Mapped[str] = mapped_column(String(2)) - original_customs_office: Mapped[str] = mapped_column(String(3)) - original_license: Mapped[str] = mapped_column(String(4)) - original_pedimento_number: Mapped[str] = mapped_column(String(7)) - original_pedimento_code: Mapped[str] = mapped_column(String(2)) - original_payment_date: Mapped[datetime] = mapped_column(DateTime) - total_cash: Mapped[int] = mapped_column(Integer) - total_others: Mapped[int] = mapped_column(Integer) - reason: Mapped[str] = mapped_column(String(255)) - charge_to_client: Mapped[int] = mapped_column(SmallInteger) - use_original_payment_date_for_interest_calc: Mapped[int] = mapped_column( - SmallInteger + original_pedimento_year: Mapped[str | None] = mapped_column(String(2), nullable=True) + original_customs_office: Mapped[str | None] = mapped_column(String(3), nullable=True) + original_license: Mapped[str | None] = mapped_column(String(4), nullable=True) + original_pedimento_number: Mapped[str | None] = mapped_column(String(7), nullable=True) + original_pedimento_code: Mapped[str | None] = mapped_column(String(2), nullable=True) + original_payment_date: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + total_cash: Mapped[int | None] = mapped_column(Integer, nullable=True) + total_others: Mapped[int | None] = mapped_column(Integer, nullable=True) + reason: Mapped[str | None] = mapped_column(String(255), nullable=True) + charge_to_client: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) + use_original_payment_date_for_interest_calc: Mapped[int | None] = mapped_column( + SmallInteger, nullable=True ) - manual_calculation: Mapped[int] = mapped_column(SmallInteger) - original_pedimento_norms: Mapped[int] = mapped_column(SmallInteger) + manual_calculation: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) + original_pedimento_norms: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) pedimento: Mapped["Pedimentos"] = relationship( "Pedimentos", back_populates="pedimento_rectification_origin" diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py index b6538b9c..eab865ff 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py @@ -28,6 +28,7 @@ class PedimentoRectificationDestinationService: .filter( PedimentoRectificationDestination.pedimento_id == pedimento_id, PedimentoRectificationDestination.tenant_id == tenant_id, + PedimentoRectificationDestination.company_id == company_id, ) .first() ) diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py index b92db00e..39304792 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py @@ -26,6 +26,7 @@ class PedimentoRectificationOriginService: .filter( PedimentoRectificationOrigin.pedimento_id == pedimento_id, PedimentoRectificationOrigin.tenant_id == tenant_id, + PedimentoRectificationOrigin.company_id == company_id, ) .first() ) diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py b/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py index 31a1f658..92f4d00f 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py @@ -148,7 +148,7 @@ class PedimentosService: Pedimento or None if not found """ query = db.query(Pedimentos).filter( - Pedimentos.id == pedimento_id, Pedimentos.tenant_id == tenant_id, Pedimentos.company_id == company_id + Pedimentos.id == pedimento_id, Pedimentos.tenant_id == tenant_id ) if company_id is not None: @@ -199,6 +199,25 @@ class PedimentosService: Created pedimento """ try: + # Check for existing pedimento with same key (Year, Aduana, Patente, Number) + # This avoids IntegrityError in many cases and provides a better error message. + existing = db.query(Pedimentos).filter( + Pedimentos.tenant_id == tenant_id, + Pedimentos.company_id == company_id, + Pedimentos.year == pedimento_data.year, + Pedimentos.customs_office == pedimento_data.customs_office, + Pedimentos.license == pedimento_data.license, + Pedimentos.pedimento_number == pedimento_data.pedimento_number, + Pedimentos.deleted_at.is_(None) + ).first() + + if existing: + raise ValueError( + f"Ya existe un pedimento con estos datos: {pedimento_data.year}-{pedimento_data.customs_office}-{pedimento_data.license}-{pedimento_data.pedimento_number}" + ) + + # Extraer datos de tablas relacionadas + # Extraer datos de tablas relacionadas related_data = { 'pedimento_dates': pedimento_data.pedimento_dates, @@ -329,11 +348,23 @@ class PedimentosService: except IntegrityError as e: db.rollback() - # Detectar si es un error de pedimento duplicado - error_msg = str(e.orig) - if 'pedimentos_unique_key' in error_msg or 'duplicate key value violates unique constraint' in error_msg: - logger.warning(f"Attempted to create duplicate pedimento: {e}") - raise ValueError("Ya existe un pedimento con estos datos (Año, Aduana, Patente, Número)") + # Detectar si es un error de integridad de duplicados o similar + error_msg = str(e.orig).lower() + + # Case-insensitive check and support for both Spanish and English common error patterns + is_unique_violation = any(kw in error_msg for kw in [ + 'pedimentos_unique_key', + 'unique constraint', + 'duplicate key', + 'duplicada', + 'unicidad', + 'ya existe' + ]) + + if is_unique_violation: + logger.warning(f"Attempted to create duplicate pedimento or common record: {e}") + raise ValueError("Ya existe un pedimento o registro relacionado con estos datos. Verifica los campos únicos.") + logger.error(f"Integrity error creating pedimento: {e}") raise except Exception as e: @@ -363,6 +394,9 @@ class PedimentosService: if not pedimento: return None + # Ensure company_id is set from the existing record + company_id = pedimento.company_id + try: # Actualizar campos principales del pedimento update_data = pedimento_data.model_dump(exclude_unset=True, exclude={ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py index 4ac1a3c8..be0ea597 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py @@ -4,7 +4,7 @@ CSV generation utilities for invoice movement reports. import csv import io from typing import List, Union -from datetime import datetime +from datetime import datetime, date from .schemas import MovementItem, MovementItemDetailed, AllMovementsFilter @@ -15,18 +15,18 @@ def generate_csv_from_movements( ) -> str: """ Generate CSV content from movement items. - + Args: movements: List of movement items (normal or detailed) filters: Filter object containing report parameters - + Returns: CSV content as string """ output = io.StringIO() - + if filters.report_type.value.lower() == "normal": - # Normal report - only fields that are actually populated + # Normal report fieldnames = [ # Identification 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', @@ -43,31 +43,34 @@ def generate_csv_from_movements( # Metadata 'BaseDeDatos', 'UsuarioCap', 'UsuarioAcr' ] - + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() - + for movement in movements: row = movement.model_dump() # Format datetime fields row['FechaFactura'] = _format_datetime(row.get('FechaFactura')) row['Fecha_Pago'] = _format_datetime(row.get('Fecha_Pago')) - + # Format numeric fields row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) row['ValorMPTemp'] = _format_decimal(row.get('ValorMPTemp')) row['ValorAgre'] = _format_decimal(row.get('ValorAgre')) - + writer.writerow(row) - + else: - # Detailed report - only fields that are actually populated + # Detailed report fieldnames = [ # Identification 'Linea', 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', - # Parties (names only, no RFC/TaxID as they're not in queries) - 'Proveedor', 'VendidoA', + # Parties + 'Proveedor', 'RFCProveedor', 'ProveedorTaxID', + 'VendidoA', 'VendidoARFC', 'VendidoATaxID', + # Customs broker + 'AgenteAduanal', 'Patente', # Product 'NumParte', 'DescripcionE', 'DescripcionI', 'CantidadIE', 'UniMed', # Classification @@ -76,8 +79,6 @@ def generate_csv_from_movements( 'ValorComercialMN', 'TipoCambio', 'PesoNeto', 'PesoBruto', # Customs 'TipoMovTemDef', 'Regimen', 'Aduana', 'Advalorem', 'Preferencia', - # Customs Broker - 'AgenteAduanal', 'Patente', # References 'OrdenCompraVenta', 'Remesa', 'PedimentoR1', 'EDocument', 'NumOperacionVU', # Identifiers @@ -90,10 +91,10 @@ def generate_csv_from_movements( 'Estatus', 'BaseDeDatos', 'TipoExpo', 'EsCambioRegimen', 'Pedimento18', 'UsuarioCap', 'UsuarioAcr' ] - + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() - + for movement in movements: row = movement.model_dump() # Format datetime fields @@ -102,16 +103,16 @@ def generate_csv_from_movements( row['Fecha_Inicio'] = _format_datetime(row.get('Fecha_Inicio')) row['Fecha_Fin'] = _format_datetime(row.get('Fecha_Fin')) row['FechaEmision'] = _format_datetime(row.get('FechaEmision')) - + # Format numeric fields row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) row['CantidadIE'] = _format_decimal(row.get('CantidadIE')) row['PesoNeto'] = _format_decimal(row.get('PesoNeto')) row['PesoBruto'] = _format_decimal(row.get('PesoBruto')) - + writer.writerow(row) - + csv_content = output.getvalue() output.close() return csv_content @@ -119,11 +120,25 @@ def generate_csv_from_movements( def _format_datetime(dt) -> str: """Format datetime for CSV export.""" - if isinstance(dt, datetime): - return dt.strftime('%Y-%m-%d') - elif isinstance(dt, str): - return dt - return '' + if not dt or dt == '' or dt == '-' or dt == '0': + return '' + try: + if isinstance(dt, str): + if 'T' in dt: + dt_obj = datetime.strptime(dt.split('T')[0], '%Y-%m-%d') + elif len(dt) == 8 and dt.isdigit(): + dt_obj = datetime.strptime(dt, '%Y%m%d') + elif '-' in dt: + dt_obj = datetime.strptime(dt, '%Y-%m-%d') + else: + return dt + elif isinstance(dt, (datetime, date)): + dt_obj = dt + else: + return '' + return dt_obj.strftime('%d/%m/%Y') + except (ValueError, TypeError): + return str(dt) if dt else '' def _format_decimal(value, decimals: int = 2) -> str: @@ -133,4 +148,4 @@ def _format_decimal(value, decimals: int = 2) -> str: try: return f"{float(value):.{decimals}f}" except (ValueError, TypeError): - return str(value) if value else '' + return str(value) if value else '' \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py index 93954c4d..024d23c3 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py @@ -337,6 +337,7 @@ class DatabaseHelper: db: Database session pedimento: Original pedimento number ped_rectifica: Initial rectification pedimento from database field + (already resolved from pedimento_rectification_origin JOIN in query) is_shelter: Shelter company flag Returns: @@ -344,10 +345,11 @@ class DatabaseHelper: """ if is_shelter: # Shelter: use direct value from PedRectifica field - return ped_rectifica + result = ped_rectifica else: # Non-Shelter: implement BuscarRectificacion logic - return DatabaseHelper._buscar_rectificacion(db, pedimento, ped_rectifica) + result = DatabaseHelper._buscar_rectificacion(db, pedimento, ped_rectifica) + return result @staticmethod def _buscar_rectificacion( @@ -357,41 +359,25 @@ class DatabaseHelper: ) -> Optional[str]: """ BUSCA ULTIMO PEDIMENTO DE RECTIFICACION - Follows the rectification chain recursively until finding the final pedimento. - - Clarion logic: - - If PPedRec is empty, return '' - - Otherwise, follow the chain using BUSCA_PEDIMENTO_R1 recursively - - Return the last Pedimento2 in the chain if no circular reference - - Return Pedimento1 if error (circular reference detected) + Returns the rectification origin pedimento string already resolved by the query + builder's JOIN on pedimento_rectification_origin. Args: db: Database session - pedimento_orig: Original pedimento number - ped_rec: Initial rectification pedimento + pedimento_orig: Original pedimento number (e.g. "1234567") + ped_rec: Rectification pedimento origin string already computed by the SQL JOIN + (e.g. "25-470-8000-1234567") Returns: - Final pedimento in rectification chain or empty string + The rectification origin string, or empty string if none. """ if not ped_rec: return '' - try: - # Track visited pedimentos to detect circular references - visited = set() - visited.add(pedimento_orig) - - # Start recursive search - final_pedimento = DatabaseHelper._busca_pedimento_r1( - db, ped_rec, visited - ) - - # If successful, return final pedimento; otherwise return original rectification - return final_pedimento if final_pedimento else ped_rec - - except Exception as e: - logger.error(f"Error in BuscarRectificacion for {pedimento_orig}: {e}") - return pedimento_orig + # The ped_rec value already comes from the JOIN on pedimento_rectification_origin + # in the query builder, so it is the directly stored origin pedimento. + # Return it directly without any further recursive DB lookup. + return ped_rec @staticmethod def _busca_pedimento_r1( @@ -400,18 +386,12 @@ class DatabaseHelper: visited: set ) -> Optional[str]: """ - BUSCA_PEDIMENTO_R1 ROUTINE - Recursive search for final rectification pedimento. - - Clarion logic: - - Fetch pedimento from QPedimentos table - - If it has PedRectifica: - - Check if already visited (circular reference = error) - - Add to visited set and recurse with PedRectifica - - Return the deepest pedimento found + BUSCA_PEDIMENTO_R1 ROUTINE - Recursive search for final rectification pedimento + using pedimento_rectification_origin table. Args: db: Database session - pedimento: Current pedimento to check + pedimento: Current pedimento number to check visited: Set of already visited pedimentos (prevents infinite loops) Returns: @@ -423,35 +403,39 @@ class DatabaseHelper: return None try: - # Query pedimentos table for ped_rectifica + # Query pedimento_rectification_origin for the next pedimento in the chain. + # NOTE: The a76.pedimentos table does NOT have a ped_rectifica column. + # Rectification data lives in pedimento_rectification_origin. sql = text(""" - SELECT ped_rectifica - FROM a76.pedimentos - WHERE pedimento_number = :pedimento + SELECT + pro.original_pedimento_year || '-' || pro.original_customs_office || + '-' || pro.original_license || '-' || pro.original_pedimento_number AS ped_origen + FROM a76.pedimento_rectification_origin pro + INNER JOIN a76.pedimentos ped ON ped.id = pro.pedimento_id + WHERE ped.pedimento_number = :pedimento + AND pro.deleted_at IS NULL LIMIT 1 """) result = db.execute(sql, {"pedimento": pedimento}).fetchone() - if result and result[0]: + if result and result[0] and result[0].replace('-', '').strip(): ped_rectifica_next = result[0] # Add current pedimento to visited set visited.add(pedimento) - # Recurse with next rectification + # Recurse with next rectification origin final_ped = DatabaseHelper._busca_pedimento_r1( db, ped_rectifica_next, visited ) - # If recursion failed (circular ref), return None - # Otherwise return the final pedimento found return final_ped if final_ped else pedimento else: # No more rectifications, this is the final pedimento return pedimento except Exception as e: - logger.error(f"Error fetching rectification for pedimento {pedimento}: {e}") + logger.error(f"Error fetching rectification origin for pedimento {pedimento}: {e}") return None @staticmethod diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py index 442252b9..927eaf09 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -143,9 +143,9 @@ class DefinitiveImportService: UsuarioAcr=row[23], # C54 - UsuarioAct Fecha_Pago=parse_yyyymmdd_date(row[8]), # C13 - Fecha_Pago NumCaja=row[24], # C56 - Transporte + NumTrasporte - tipo_pedimento=row[25], # C57 - Pedimento18 (Note: Schema doesn't have tipo_pedimento field, this might be extra) + Pedimento18=row[25], # C57 - empty (index 25) AduanaCru=row[15], # C39 - Aduana_Cruce - Lote=row[26] # C58 - LOTE + Lote=row[26] # C58 - empty (index 26) ) movements.append(movement) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index 331f1858..bec76370 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -97,7 +97,7 @@ class ExportService: rectified_pedimento = DatabaseHelper.get_rectification_pedimento( db, row[1], # C2 - PedimentoExpo - '', # PedRectifica not in aggregated query + row[26], # C54 - PedRectifica filters.is_shelter ) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 8f8887f8..58743e80 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -37,6 +37,35 @@ class ExportRepairService: ) -> List[MovementItem]: """ Get export repair movements (normal mode - grouped by invoice). + + Aggregated query column order (ExportRepairQueries.build_aggregated_query): + [0] C1 - invoice_number + [1] C2 - pedimento_number + [2] C3 - invoice_date + [3] C6 - estatus (AC/NA) + [4] C7 - pedimento_code + [5] C8 - regime + [6] C11 - payment_date + [7] C12 - remesa + [8] C13 - exchange_rate (fecha_pago context) + [9] C14 - provider_id + [10] C15 - sold_to_id + [11] C16 - customs_broker_id + [12] C27 - purchase_order + [13] C33 - customs_office ← AduanaCru + [14] C34 - document_type ← TipoFactura / tipo_mov + [15] C35 - id ← consecutivo + [16] C40 - edocument ← EDocument + [17] C41 - vucem_op_num ← NumOperacionVU + [18] C48 - exchange_rate ← TipoCambio + [19] C49 - emission_date + [20] C50 - capture_user ← UsuarioCap + [21] C51 - who_updated ← UsuarioAcr + [22] C52 - carrier_id ← Transportista + [23] C53 - transport ← NumCaja + [24] total_me + [25] total_mn + [26] C54 - ped_r1 ← PedimentoR1 Args: db: Database session @@ -62,21 +91,19 @@ class ExportRepairService: movements = [] for row in results: - factura = row[0] # C1 - FacturaExpo - tipo_mov = row[14] # C34 - TipoFactura - estatus = row[3] # C6 - Estatus (AC o NA) + factura = row[0] # C1 - FacturaExpo + tipo_mov = row[14] # C34 - TipoFactura + estatus = row[3] # C6 - Estatus (AC o NA) # Filtrar facturas según include_cancelled - # Si include_cancelled=False, solo mostrar AC (is_updated=true) - # Si include_cancelled=True, mostrar todas (AC y NA) if not filters.include_cancelled and estatus != 'AC': continue consecutivo = row[15] # C35 - Consecutivo # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[24] # total_me from SUM aggregation - total_mn = row[25] # total_mn from SUM aggregation + total_me = row[24] # total_me + total_mn = row[25] # total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -85,9 +112,9 @@ class ExportRepairService: valor_me=total_me, valor_mn=total_mn, tipo_cambio_db=row[18], # C48 - TipoCambio - fecha_pago=row[6], # C11 - Fecha_Pago - fecha_inicio='', # Not in aggregated query - tipo_pedimento='', # Not in aggregated query + fecha_pago=row[6], # C11 - Fecha_Pago + fecha_inicio='', + tipo_pedimento='', currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, is_shelter=filters.is_shelter, @@ -95,11 +122,11 @@ class ExportRepairService: met_trans=met_trans ) - # Get pedimento rectification + # Get pedimento rectification (already resolved by SQL COALESCE) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( db, - row[1], # C2 - PedimentoExpo - '', # PedRectifica not in aggregated query + row[1], # C2 - PedimentoExpo + row[26], # C54 - PedRectifica (pre-built by SQL) filters.is_shelter ) @@ -109,11 +136,11 @@ class ExportRepairService: # Build movement item movement = MovementItem( Factura=factura, - Pedimento=row[1], # C2 - PedimentoExpo - FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura - Estatus=row[3], # C6 - Estatus - ClavePed=row[4], # C7 - ClavePed - TipoMovTemDef=tipo_mov, + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C6 - Estatus + ClavePed=row[4], # C7 - ClavePed + TipoMovTemDef=tipo_mov, # C34 - TipoFactura EsCambioRegimen='N', ValorMPTemp=valor_comercial, ValorComercialMN=valor_comercial, @@ -121,17 +148,17 @@ class ExportRepairService: ValorAgre=0.0, TipoExpo='EXPO REP', PedimentoR1=pedimento_r1, - EDocument=row[16], # C40 - EDocument - NumOperacionVU=row[17], # C41 - NumOperacionVU + EDocument=row[16], # C40 - EDocument ← FIXED (was 17) + NumOperacionVU=row[17], # C41 - NumOperacionVU ← FIXED (was 18) BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, - UsuarioCap=row[20], # C50 - UsuarioCap - UsuarioAcr=row[21], # C51 - UsuarioAct - Fecha_Pago=parse_yyyymmdd_date(row[6]), # C11 - Fecha_Pago - NumCaja=row[23], # C53 - Transporte + NumTrasporte - Pedimento18='', # Not in aggregated query - AduanaCru=row[13], # C33 - customs_office - Lote='' # Not in aggregated query + UsuarioCap=row[20], # C50 - UsuarioCap ← FIXED (was 21) + UsuarioAcr=row[21], # C51 - UsuarioAct ← FIXED (was 22) + Fecha_Pago=parse_yyyymmdd_date(row[6]), # C11 - Fecha_Pago ← FIXED (was 8) + NumCaja=row[23], # C53 - NumCaja + Pedimento18='', + AduanaCru=row[13], # C33 - customs_office ← FIXED (was 14) + Lote='' ) movements.append(movement) @@ -248,7 +275,7 @@ class ExportRepairService: # Get pedimento rectification pedimento_r1 = DatabaseHelper.get_rectification_pedimento( db, - row[1], # C2 - PedimentoExpo + row[1], # C2 - PedimentoExpo row[38], # C39 - PedRectifica filters.is_shelter ) @@ -258,19 +285,19 @@ class ExportRepairService: # Build detailed movement item movement = MovementItemDetailed( - Linea=row[41], # C42 - LineaExpo - Factura=row[0], # C1 - FacturaExpo - Pedimento=row[1], # C2 - PedimentoExpo - FechaFactura=row[2], # C3 - FechaFactura - Estatus=row[5], # C6 - Estatus - ClavePed=row[6], # C7 - ClavePed - TipoMovTemDef=row[33], # C34 - TipoFactura + Linea=row[41], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[6], # C7 - ClavePed + TipoMovTemDef=row[33], # C34 - TipoFactura EsCambioRegimen='N', - Regimen=row[7], # C8 - Regimen - Fecha_Inicio=row[8], # C9 - Fecha_Inicio - Fecha_Fin=row[9], # C10 - Fecha_Fin - Fecha_Pago=row[10], # C11 - Fecha_Pago - Remesa=row[11], # C12 - Remesa + Regimen=row[7], # C8 - Regimen + Fecha_Inicio=row[8], # C9 - Fecha_Inicio + Fecha_Fin=row[9], # C10 - Fecha_Fin + Fecha_Pago=row[10], # C11 - Fecha_Pago + Remesa=row[11], # C12 - Remesa Proveedor=proveedor_info.get('name'), RFCProveedor=proveedor_info.get('rfc'), ProveedorTaxID=proveedor_info.get('tax_id'), @@ -279,42 +306,42 @@ class ExportRepairService: VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[17], # C18 - Clase (NumParte) + NumParte=row[17], # C18 - Clase (NumParte) DescripcionE=StringHelper.clean_text(row[18]), # C19 DescripcionI=StringHelper.clean_text(row[19]), # C20 CantidadIE=float(row[20]) if row[20] else 0.0, # C21 - UniMed=row[21], # C22 + UniMed=row[21], # C22 ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, - OrdenCompraVenta=row[26], # C27 - OrdenCompra - FraccionArancelaria=row[27], # C28 - FraccionExpo - Preferencia=row[28], # C29 - TipoFraccion - Sector=row[30], # C31 - Sector - PaisOrigen=row[31], # C32 - PaisOrigen + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen Aduana=aduana_nombre, - Advalorem=row[37], # C38 - EsSubPartida + Advalorem=row[37], # C38 - EsSubPartida TipoExpo='EXPO REP', PedimentoR1=pedimento_r1, - EDocument=row[39], # C40 - EDocument - NumOperacionVU=row[40], # C41 - NumOperacionVU + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU Series=series_info, - Marca=StringHelper.clean_text(row[42]), # C43 + Marca=StringHelper.clean_text(row[42]), # C43 Modelo=StringHelper.clean_text(row[43]), # C44 - FraccionAmericana=row[44], # C45 - FraccionAme - ECCN=row[45], # C46 - ECCN + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN SimboloEx=simbolo_ex, - FechaEmision=row[48], # C49 - FechaFactura + FechaEmision=row[48], # C49 - FechaFactura BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, - UsuarioCap=row[49], # C50 - UsuarioCap - UsuarioAcr=row[50], # C51 - UsuarioAct - Transportista=row[51], # C52 - Transportista - NumCaja=row[52], # C53 - Transporte + NumTrasporte - Pedimento18=row[53], # C54 - Pedimento18 - AduanaCru=row[32], # C33 - Aduana_Cruce - Lote=row[54] # C55 - Lote + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Transportista + NumCaja=row[52], # C53 - Transporte + NumTrasporte + Pedimento18=row[53], # C54 - Pedimento18 + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] # C55 - Lote ) movements.append(movement) @@ -334,7 +361,6 @@ class ExportRepairService: where_conditions.append("ih.operation_type = 'exp'") # GOLDEN RULE: If movement_type is ALL, only filter by operation_type if filters.movement_type.value == "ALL": - # ALL mode: bring all exports without filtering by specific invoice_type pass else: where_conditions.append("ih.invoice_type = 'REPAR'") @@ -345,9 +371,6 @@ class ExportRepairService: else: where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") - # Note: Status filter applied at Python level after CASE WHEN in SELECT - # because is_updated doesn't directly represent AC/NA status - # Provider filter if filters.provider: where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") @@ -397,4 +420,4 @@ class ExportRepairService: def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: """Get driver badge number for invoice.""" # TODO: GConductor table not migrated to PostgreSQL yet - return None + return None \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index 86bf2f1a..b935e039 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -29,7 +29,11 @@ class TemporaryImportQueries: COALESCE(cmp.customs_broker_id::text, '') AS C18, COALESCE(cmp.aduana, '') AS C38, ih.id AS C39, - COALESCE(ped_r1.pedimento_number, '') AS C41, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C41, COALESCE(cmp.edocument, '') AS C42, COALESCE(cmp.vucem_operation_num, '') AS C43, COALESCE(fin.exchange_rate, 0) AS C50, @@ -42,18 +46,38 @@ class TemporaryImportQueries: '' AS C57, '' AS C58, COALESCE(fin.value_me, 0) AS total_me, - COALESCE(fin.value_mn, 0) AS total_mn + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE(lf_agg.sum_value_mxn, 0) AS valor_comercial_mn, + COALESCE(lf_agg.sum_value_temp_mxn, 0) AS valor_mp_temp_mn, + COALESCE(lf_agg.sum_value_added_mxn, 0) AS valor_agre_mn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN ( + SELECT i.invoice_id, + SUM(COALESCE(lf.value_mxn, 0)) AS sum_value_mxn, + SUM(COALESCE(lf.value_temp_material_mxn, 0)) AS sum_value_temp_mxn, + SUM(COALESCE(lf.value_added_mxn, 0)) AS sum_value_added_mxn + FROM a76.items i + JOIN a76.item_lines il ON il.item_id = i.id + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + GROUP BY i.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id WHERE ih.operation_type = 'imp' AND ih.invoice_type = 'TEM' AND {where_str} ORDER BY ih.invoice_number """ + @staticmethod def build_main_query(db_name: str, where_str: str) -> str: @@ -101,9 +125,13 @@ class TemporaryImportQueries: COALESCE(cmp.aduana, '') AS C38, ih.id AS C39, FALSE AS C40, - '' AS C41, - COALESCE(cmp.edocument, '') AS C42, - COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C41, -- [40] rectification_id + cmp.edocument AS C42, -- [41] + cmp.vucem_operation_num AS C43, -- [42] COALESCE(il.line_number, 0) AS C44, '' AS C45, '' AS C46, @@ -124,6 +152,13 @@ class TemporaryImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items i ON i.invoice_id = ih.id @@ -201,7 +236,11 @@ class DefinitiveImportQueries: COALESCE(ih.purchase_order, '') AS C31, COALESCE(cmp.aduana, '') AS C39, ih.id AS C35, - COALESCE(ped_r1.pedimento_number, '') AS C42, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C42, COALESCE(cmp.edocument, '') AS C43, COALESCE(cmp.vucem_operation_num, '') AS C44, COALESCE(fin.exchange_rate, 0) AS C51, @@ -219,7 +258,13 @@ class DefinitiveImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id WHERE ih.operation_type = 'imp' AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') AND {where_clause} @@ -269,7 +314,11 @@ class DefinitiveImportQueries: cmp.aduana AS C39, -- [38] il.material_type AS C40, -- [39] il.id AS C41, -- [40] - '' AS C42, -- [41] rectification_id + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C42, -- [41] rectification_id cmp.edocument AS C43, -- [42] cmp.vucem_operation_num AS C44, -- [43] il.line_number AS C45, -- [44] @@ -293,6 +342,13 @@ class DefinitiveImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id @@ -388,22 +444,34 @@ class RepairImportQueries: COALESCE(log.transport_num, '') AS C45, COALESCE(ped.pedimento_code, '') AS C47, COALESCE(fin.value_me, 0) AS total_me, - COALESCE(fin.value_mn, 0) AS total_mn + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C48 FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id - LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id WHERE ih.operation_type = 'imp' AND COALESCE(cmp.is_regime_change, false) = false AND EXISTS ( - SELECT 1 FROM a76.item_lines il2 + SELECT 1 FROM a76.items i2 + INNER JOIN a76.item_lines il2 ON il2.item_id = i2.id INNER JOIN a24.fa_item_lines fil2 ON fil2.id = il2.id - WHERE il2.item_id = i.id AND fil2.search_invoice IS NOT NULL + WHERE i2.invoice_id = ih.id AND fil2.search_invoice IS NOT NULL + {discharge_filter} ) {"AND " + where_str if where_str else ""} - {discharge_filter} ORDER BY ih.invoice_number """ @@ -450,7 +518,11 @@ class RepairImportQueries: COALESCE(ped.customs_office, ''), ih.id, 'P', - '', + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ), COALESCE(cmp.edocument, ''), COALESCE(cmp.vucem_operation_num, ''), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), @@ -470,6 +542,13 @@ class RepairImportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -568,12 +647,24 @@ class ExportQueries: COALESCE(ih.who_updated, '') AS C51, COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, COALESCE(fin.value_me, 0) AS total_me, - COALESCE(fin.value_mn, 0) AS total_mn + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C54 FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id WHERE {where_clause} ORDER BY ih.invoice_number """ @@ -620,7 +711,11 @@ class ExportQueries: lf.value_mxn AS C36, -- [35] lf.value_usd AS C37, -- [36] il.material_type AS C38, -- [37] - '' AS C39, -- [38] rectification_id + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C39, -- [38] rectification_id cmp.edocument AS C40, -- [39] cmp.vucem_operation_num AS C41, -- [40] il.line_number AS C42, -- [41] @@ -647,6 +742,13 @@ class ExportQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id @@ -745,12 +847,24 @@ class ExportRepairQueries: COALESCE(log.carrier_id, '') AS C52, COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, COALESCE(fin.value_me, 0) AS total_me, - COALESCE(fin.value_mn, 0) AS total_mn + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C54 FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id WHERE ih.operation_type = 'exp' AND ih.invoice_type = 'REPAR' {"AND " + where_str if where_str else ""} @@ -800,7 +914,11 @@ class ExportRepairQueries: COALESCE(lf.value_mxn, 0) AS C36, COALESCE(lf.value_usd, 0) AS C37, 'P' AS C38, - '' AS C39, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C39, COALESCE(cmp.edocument, '') AS C40, COALESCE(cmp.vucem_operation_num, '') AS C41, COALESCE(il.line_number, 0) AS C42, @@ -826,6 +944,13 @@ class ExportRepairQueries: LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id LEFT JOIN a76.items itm ON itm.invoice_id = ih.id LEFT JOIN a76.item_lines il ON il.item_id = itm.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index f462f8b1..df28b3c6 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -114,8 +114,8 @@ class RepairImportService: # Get pedimento rectification pedimento_r1 = DatabaseHelper.get_rectification_pedimento( db, - row[1], # C3 - PedimentoImpoRep - '', # PedRectifica not in aggregated query + row[1], # C3 - PedimentoImpoRep + row[26], # C48 - PedRectifica filters.is_shelter ) @@ -258,7 +258,7 @@ class RepairImportService: ) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( - db, row[2], row[41], filters.is_shelter + db, row[2], row[32], filters.is_shelter ) num_gaf_uni = DatabaseHelper.get_driver_badge( diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index 474f6d07..29d57b0f 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -94,6 +94,9 @@ class TemporaryImportService: # Correct indices based on TemporaryImportQueries.build_aggregated_query total_me = to_float(row[28]) # total_me (index 28) total_mn = to_float(row[29]) # total_mn (index 29) + valor_comercial_mn = to_float(row[30]) # valor_comercial_mn from item_line_financials + valor_mp_temp_mn = to_float(row[31]) # valor_mp_temp_mn from item_line_financials + valor_agre_mn = to_float(row[32]) # valor_agre_mn from item_line_financials # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -134,10 +137,10 @@ class TemporaryImportService: ClavePed=row[4], # C5 - ClavePed TipoMovTemDef='IMTEM', EsCambioRegimen='N', - ValorMPTemp=valor_comercial, - ValorComercialMN=valor_comercial, + ValorMPTemp=valor_mp_temp_mn, + ValorComercialMN=valor_comercial_mn, TipoCambio=tipo_cambio, - ValorAgre=0.0, + ValorAgre=valor_agre_mn, TipoExpo='', PedimentoR1=pedimento_r1, EDocument=row[17], # C42 - EDocument @@ -147,10 +150,10 @@ class TemporaryImportService: UsuarioCap=row[21], # C52 - UsuarioCap UsuarioAcr=row[22], # C53 - UsuarioAct Fecha_Pago=parse_yyyymmdd_date(none_if_empty(row[8])), # C13 - Fecha_Pago - NumCaja=row[23], # C55 - Transporte + NumTrasporte - Pedimento18=row[24], # C56 - Pedimento18 (Actually empty in query, but safe to keep) - AduanaCru=row[14], # C38 - Aduana_Cruce - Lote=row[25] # C57 - LOTE (Actually C55 is index 24. C56 is 25) + NumCaja=row[24], # C55 - transport_num || license_plate (index 24) + Pedimento18=row[25], # C56 - '' empty (index 25) + AduanaCru=row[14], # C38 - Aduana_Cruce (index 14) + Lote=row[26] # C57 - '' empty (index 26) ) movements.append(movement) diff --git a/backend/core/error_handlers.py b/backend/core/error_handlers.py index e1f7783a..36336b41 100644 --- a/backend/core/error_handlers.py +++ b/backend/core/error_handlers.py @@ -91,16 +91,19 @@ async def integrity_error_handler( }, ) - # Intentar extraer información útil del error - error_message = "Error de integridad en la base de datos" - orig_msg = str(exc.orig).lower() - if "unique constraint" in orig_msg or "duplicate key" in orig_msg: - error_message = "El registro ya existe. Verifica los campos únicos." - elif "foreign key" in orig_msg: - error_message = "Referencia inválida a otro registro." - elif "not null" in orig_msg: - error_message = "Falta un campo requerido." + + # Check for unique/duplicate key violations (English and Spanish) + if any(kw in orig_msg for kw in ["unique constraint", "duplicate key", "duplicada", "unicidad", "ya existe"]): + error_message = "El registro ya existe. Verifica los campos únicos (Año, Aduana, Patente, Número, etc.)." + # Check for foreign key violations (English and Spanish) + elif any(kw in orig_msg for kw in ["foreign key", "foránea", "referencia"]): + error_message = "Referencia inválida a otro registro. Verifica las categorías y catálogos seleccionados." + # Check for not null violations (English and Spanish) + elif any(kw in orig_msg for kw in ["not null", "no nulo", "valor nulo"]): + error_message = "Falta un campo requerido. Asegúrate de llenar todos los datos obligatorios." + else: + error_message = "Error de integridad en la base de datos" return JSONResponse( status_code=status.HTTP_409_CONFLICT, diff --git a/frontend/src/lib/api/dashboard/a76/invoices.ts b/frontend/src/lib/api/dashboard/a76/invoices.ts index ea5c2194..3e537e6d 100644 --- a/frontend/src/lib/api/dashboard/a76/invoices.ts +++ b/frontend/src/lib/api/dashboard/a76/invoices.ts @@ -319,6 +319,7 @@ export interface UpdateInvoiceData { cfdi_uuid?: string | null; path_pdf?: string | null; path_xml?: string | null; + is_updated?: boolean | null; compliance_mx?: Partial | null; financials?: Partial | null; logistics?: Partial[] | null; diff --git a/frontend/src/lib/api/dashboard/a76/pedimentos.ts b/frontend/src/lib/api/dashboard/a76/pedimentos.ts index a5069c9f..582e913d 100644 --- a/frontend/src/lib/api/dashboard/a76/pedimentos.ts +++ b/frontend/src/lib/api/dashboard/a76/pedimentos.ts @@ -10,12 +10,12 @@ export interface PedimentoDates { pedimento_date?: string | null; payment_date?: string | null; rectification_payment_date?: string | null; - extraction_date?: string | null; + extraction_date?: string | null; submission_date?: string | null; eucan_date?: string | null; - original_date?: string | null; - start_date?: string | null; - end_date?: string | null; + original_date?: string | null; + start_date?: string | null; + end_date?: string | null; } export interface PedimentoPayments { @@ -279,9 +279,9 @@ export const pedimentosApi = { * @param filters - Filtros opcionales * @param companyId - ID de la compañía (por defecto 1) */ - list: (page = 1, pageSize = 50, filters?: PedimentoFilters, companyId = 1) => { + list: (page = 1, pageSize = 50, filters?: PedimentoFilters, companyId?: number) => { let url = `/v1/a76/pedimentos/?company_id=${companyId}&page=${page}&page_size=${pageSize}`; - + if (filters?.status) { url += `&status=${encodeURIComponent(filters.status)}`; } @@ -291,7 +291,7 @@ export const pedimentosApi = { if (filters?.year) { url += `&year=${encodeURIComponent(filters.year)}`; } - + return api.get(url); }, @@ -300,14 +300,14 @@ export const pedimentosApi = { * @param id - ID del pedimento * @param companyId - ID de la compañía (por defecto 1) */ - get: (id: number, companyId = 1) => api.get(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`), + get: (id: number, companyId?: number) => api.get(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`), /** * Crea un nuevo pedimento * @param data - Datos del pedimento a crear * @param companyId - ID de la compañía (por defecto 1) */ - create: (data: CreatePedimentoData, companyId = 1) => + create: (data: CreatePedimentoData, companyId?: number) => api.post(`/v1/a76/pedimentos/?company_id=${companyId}`, data), /** @@ -316,7 +316,7 @@ export const pedimentosApi = { * @param data - Datos a actualizar * @param companyId - ID de la compañía (por defecto 1) */ - update: (id: number, data: UpdatePedimentoData, companyId = 1) => + update: (id: number, data: UpdatePedimentoData, companyId?: number) => api.put(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`, data), /** @@ -324,5 +324,5 @@ export const pedimentosApi = { * @param id - ID del pedimento a eliminar * @param companyId - ID de la compañía (por defecto 1) */ - delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`) + delete: (id: number, companyId?: number) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`) }; diff --git a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte index ed8c87f3..8f80a09a 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte @@ -301,7 +301,6 @@
-
diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte index a7a749f6..1682fadb 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte @@ -83,6 +83,22 @@ actualizar_ieps_rect: boolean; calcular_recargos_diferencias: boolean; + // Rectificación (R1) + es_rectificacion: string; + pedimento_original: string; + clave_pedimento_original: string; + fecha_pago_original: string; + anio_impresion_rect: string; + aduana_seccion_original: string; + patente_original: string; + utilizar_fecha_pago_original: boolean; + calculo_manual_contribuciones: boolean; + causa: string; + motivo: string; + + // Diferencias en contribuciones + liquidacion_diferencias: { gravamen: string; forma_pago: string; importe: string }[]; + // Parámetro de cambio de DTA proveedor_nacional_modifico_dta: boolean; @@ -133,6 +149,18 @@ actualizar_cc_rect: false, actualizar_ieps_rect: false, calcular_recargos_diferencias: false, + es_rectificacion: '', + pedimento_original: '', + clave_pedimento_original: '', + fecha_pago_original: '', + anio_impresion_rect: '', + aduana_seccion_original: '', + patente_original: '', + utilizar_fecha_pago_original: false, + calculo_manual_contribuciones: false, + causa: '', + motivo: '', + liquidacion_diferencias: [], proveedor_nacional_modifico_dta: false, calculo_valor_aduana_v2: false, calculo_2_decimales_valor_unitario: false, @@ -275,20 +303,6 @@ // Estados para vista de Rectificación let showRectificacion = $state(false); - let rectificacionFormData = $state({ - es_rectificacion: '', - pedimento_original: '00-0000:0000000', - clave_pedimento_original: '', - fecha_pago_original: '', - anio_impresion_rect: '', - aduana_seccion_original: '', - patente_original: '', - utilizar_fecha_pago_original: false, - calculo_manual_contribuciones: false - }); - let liquidacionDiferencias = $state<{ gravamen: string; forma_pago: string; importe: string }[]>( - [] - ); // Estados para diálogo de diferencias en contribuciones let isDiferenciasDialogOpen = $state(false); @@ -308,10 +322,6 @@ // Estados para vista de Rectificación II let showRectificacionII = $state(false); - let rectificacionIIFormData = $state({ - causa: '', - motivo: '' - }); // Estados para vista de Notas let showNotas = $state(false); @@ -576,9 +586,9 @@ }; if (editingDiferenciaIndex !== null) { - liquidacionDiferencias[editingDiferenciaIndex] = newItem; + formData.liquidacion_diferencias[editingDiferenciaIndex] = newItem; } else { - liquidacionDiferencias.push(newItem); + formData.liquidacion_diferencias = [...formData.liquidacion_diferencias, newItem]; } isDiferenciasDialogOpen = false; } @@ -737,7 +747,7 @@ } -
+
{#if !showBitacora && !showPartesII && !showRectificacion && !showRectificacionII && !showNotas && !showSeleccionAutomatizada && !showMultas} @@ -748,7 +758,7 @@ -
+

Parámetros de cálculo:

@@ -792,49 +802,49 @@ id="dta_operacion" bind:checked={formData.dta_por_operacion_ag_facturas} /> -
-
- +
-
-
+
-
-
-
@@ -844,7 +854,7 @@ id="cuota_fija_veh" bind:checked={formData.cuota_fija_adicional_vehiculo} /> -
@@ -870,7 +880,7 @@
-
@@ -888,7 +898,7 @@
-
@@ -909,7 +919,7 @@
-
+

@@ -918,35 +928,35 @@
-
-
-
-
-
@@ -959,35 +969,35 @@
-
-
-
-
-
@@ -997,7 +1007,7 @@ id="calc_recargos" bind:checked={formData.calcular_recargos_diferencias} /> -
@@ -1006,7 +1016,7 @@
-
+

Parámetro de cambio de DTA:

@@ -1015,15 +1025,15 @@ id="prov_nacional" bind:checked={formData.proveedor_nacional_modifico_dta} /> -
-
+
-
@@ -1033,7 +1043,7 @@ id="calc_2dec" bind:checked={formData.calculo_2_decimales_valor_unitario} /> -
@@ -1043,7 +1053,7 @@ id="calc_base_part" bind:checked={formData.calcular_valor_aduana_base_partidas} /> -
@@ -1058,42 +1068,42 @@
-
-
-
-
- +
-
+
@@ -1126,7 +1136,7 @@ Registro de movimientos sobre el Pedimento -
+
@@ -1141,13 +1151,13 @@ {#if bitacoraMovimientos.length === 0} - + No hay movimientos registrados {:else if paginatedBitacoraMovimientos.length === 0} - + No hay datos en esta página @@ -1175,7 +1185,7 @@ variant="outline" onclick={goToBitacoraFirstPage} disabled={currentBitacoraPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1184,11 +1194,11 @@ variant="outline" onclick={goToBitacoraPreviousPage} disabled={currentBitacoraPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > - + Página {currentBitacoraPage + 1} de {totalBitacoraPages || 1} @@ -1205,7 +1215,7 @@ variant="outline" onclick={goToBitacoraLastPage} disabled={currentBitacoraPage >= totalBitacoraPages - 1} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1223,14 +1233,14 @@ {:else if showPartesII} -
+
Embarques Parciales -
+
@@ -1249,13 +1259,13 @@ {#if embarquesParciales.length === 0} - + No hay embarques registrados {:else if paginatedEmbarquesParciales.length === 0} - + No hay datos en esta página @@ -1297,7 +1307,7 @@ variant="outline" onclick={goToPartesIIFirstPage} disabled={currentPartesIIPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1306,11 +1316,11 @@ variant="outline" onclick={goToPartesIIPreviousPage} disabled={currentPartesIIPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > - + Página {currentPartesIIPage + 1} de {totalPartesIIPages || 1} @@ -1327,7 +1337,7 @@ variant="outline" onclick={goToPartesIILastPage} disabled={currentPartesIIPage >= totalPartesIIPages - 1} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1374,42 +1384,42 @@ -
+
- +
-
+
- +

Partidas del Pedimento

-
+
- +
-
+
- +

Embarques

-
+
- +
-
+
- +
-
+
- +
@@ -1455,21 +1465,21 @@ Rectificación -
+
{ - if (v) rectificacionFormData.es_rectificacion = v; + if (v) formData.es_rectificacion = v; }} > - {rectificacionFormData.es_rectificacion === 'si' + {formData.es_rectificacion === 'si' ? 'Sí' - : rectificacionFormData.es_rectificacion === 'no' + : formData.es_rectificacion === 'no' ? 'No' : 'Seleccionar'} @@ -1485,7 +1495,8 @@
@@ -1496,7 +1507,8 @@ >
@@ -1505,7 +1517,7 @@
@@ -1513,7 +1525,8 @@
@@ -1521,13 +1534,14 @@
- +
@@ -1535,10 +1549,9 @@
{ - rectificacionFormData.utilizar_fecha_pago_original = - !rectificacionFormData.utilizar_fecha_pago_original; + formData.utilizar_fecha_pago_original = !formData.utilizar_fecha_pago_original; }} />
-
-
+
+

Cuadro de liquidación para diferencias en contribuciones

{ - rectificacionFormData.calculo_manual_contribuciones = - !rectificacionFormData.calculo_manual_contribuciones; + formData.calculo_manual_contribuciones = + !formData.calculo_manual_contribuciones; }} />
-
+
@@ -1580,14 +1593,14 @@ - {#if liquidacionDiferencias.length === 0} + {#if formData.liquidacion_diferencias.length === 0} No hay registros {:else} - {#each liquidacionDiferencias as item} + {#each formData.liquidacion_diferencias as item} {item.gravamen} {item.forma_pago} @@ -1631,8 +1644,8 @@ @@ -1641,8 +1654,8 @@ @@ -1659,7 +1672,7 @@ -
+
@@ -1668,16 +1681,16 @@ Comentario - + Fecha Hora - + {#if notasPedimento.length === 0} - + No hay notas registradas @@ -1696,7 +1709,7 @@ -
+
- + Página {currentNotasPage + 1} de {totalNotasPages || 1}
@@ -1829,7 +1842,7 @@
@@ -1873,7 +1886,7 @@
- +
-
+
# Descripción de Mercancía - Cantidad UMC - Cantidad UMT - Peso + Cantidad UMC + Cantidad UMT + Peso {#if mercancias.length === 0} - + No hay mercancías registradas @@ -2086,17 +2099,17 @@ -
- - - -
@@ -2109,7 +2122,7 @@ type="number" bind:value={currentEmbarque.cantidad_transportes} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2119,7 +2132,7 @@ type="number" bind:value={currentEmbarque.cantidad_partidas} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2130,7 +2143,7 @@ step="0.001" value={currentEmbarque.suma_cantidad_umc.toFixed(3)} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2140,7 +2153,7 @@ type="number" bind:value={currentEmbarque.cantidad_embarques} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2150,7 +2163,7 @@ type="number" bind:value={currentEmbarque.cantidad_mercancias} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2161,13 +2174,13 @@ step="0.001" value={currentEmbarque.suma_cantidad_umc_embarques.toFixed(3)} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> -
+
@@ -2190,7 +2203,7 @@ - + Mercancías del Embarque Parcial @@ -2201,7 +2214,7 @@
@@ -2311,7 +2324,7 @@
diff --git a/frontend/src/lib/components/keyboard/KeyboardManager.svelte b/frontend/src/lib/components/keyboard/KeyboardManager.svelte index cd7288cb..35f52052 100644 --- a/frontend/src/lib/components/keyboard/KeyboardManager.svelte +++ b/frontend/src/lib/components/keyboard/KeyboardManager.svelte @@ -117,6 +117,7 @@ const authenticated = isAuthenticated(); const { key, altKey, ctrlKey, metaKey, shiftKey } = event; + if (!key) return; const lowerKey = key.toLowerCase(); // Ignore standalone modifiers diff --git a/frontend/src/routes/dashboard/invoices/+page.svelte b/frontend/src/routes/dashboard/invoices/+page.svelte index f3ebcc7c..a38220bd 100644 --- a/frontend/src/routes/dashboard/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/+page.svelte @@ -187,7 +187,7 @@ selectedInvoiceId = null; } else { selectedInvoiceId = invoice.id; - } + } } const selectedInvoice = $derived( @@ -581,6 +581,36 @@ reloadData(); } + async function handleUpdateStatus(status: boolean) { + if (!selectedInvoice || !companyStore.activeCompany) { + toast.info('Seleccione una factura para cambiar su estatus'); + return; + } + + loading = true; + try { + const companyId = companyStore.activeCompany.id; + const response = await invoicesApi.update(selectedInvoice.id, companyId, { + id: selectedInvoice.id, + is_updated: status + }); + + if (response.error) { + toast.error( + `Error al ${status ? 'actualizar' : 'desactualizar'} factura: ${response.error}` + ); + } else { + toast.success(`Factura ${status ? 'actualizada' : 'desactualizada'} correctamente`); + reloadData(); + } + } catch (e) { + console.error('Error updating status:', e); + toast.error('Error inesperado al cambiar el estatus'); + } finally { + loading = false; + } + } + // Opciones de tipo de operación para el filtro const operationTypeOptions = [ { value: '', label: 'Todas' }, @@ -782,11 +812,21 @@
- - diff --git a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte index 506ec342..df9e4fec 100644 --- a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte @@ -225,7 +225,7 @@ // Función para mapear la factura existente a los formData function mapInvoiceToTopFields(invoice: any) { if (!invoice) return topFieldsSkeleton; - + let operationType: string | null = null; if (invoice.operation_type) { operationType = invoice.operation_type; @@ -251,7 +251,7 @@ function mapInvoiceToGeneral(invoice: any) { if (!invoice) return generalSkeleton; - + return { provider_header: invoice.compliance_mx?.provider_header || 'proveedor', provider_id: invoice.compliance_mx?.provider_id || null, @@ -278,7 +278,7 @@ function mapInvoiceToObservations(invoice: any) { if (!invoice) return observationSkeleton; - + return { observation_es: invoice.observation_es || '', observation_en: invoice.observation_en || '', @@ -300,7 +300,7 @@ function mapInvoiceToItems(invoice: any) { if (!invoice) return ensureItemsFormData(null); - + return { items: invoice.items || [] }; @@ -308,7 +308,7 @@ function mapInvoiceToOthers(invoice: any) { if (!invoice) return othersSkeleton; - + return { comments_status: invoice.comments_status || '', transport_mode: invoice.logistics?.transport_mode || 'TRUCK', @@ -337,7 +337,7 @@ function mapInvoiceToContinuation(invoice: any) { if (!invoice) return continuationSkeleton; - + return { numero_tipo_transporte: invoice.logistics?.numero_tipo_transporte || '', es_ferrocarril: invoice.logistics?.es_ferrocarril || 'no', @@ -351,10 +351,13 @@ funge_como_cd: invoice.logistics?.acts_as_cd || false, llego_pedimento: invoice.compliance_mx?.llego_pedimento || false, errores_facturacion: invoice.errores_facturacion || [], - semaforo_verde_aduana_mexicana: invoice.compliance_mx?.semaforo_verde_aduana_mexicana || false, - semaforo_verde_aduana_americana: invoice.compliance_mx?.semaforo_verde_aduana_americana || false, + semaforo_verde_aduana_mexicana: + invoice.compliance_mx?.semaforo_verde_aduana_mexicana || false, + semaforo_verde_aduana_americana: + invoice.compliance_mx?.semaforo_verde_aduana_americana || false, semaforo_rojo_aduana_mexicana: invoice.compliance_mx?.semaforo_rojo_aduana_mexicana || false, - semaforo_rojo_aduana_americana: invoice.compliance_mx?.semaforo_rojo_aduana_americana || false, + semaforo_rojo_aduana_americana: + invoice.compliance_mx?.semaforo_rojo_aduana_americana || false, is_mixed: invoice.compliance_mx?.is_mixed || false, reason_export: invoice.compliance_mx?.reason_export || '1', purchase_order: invoice.purchase_order || '', @@ -405,8 +408,8 @@ !data.isCreate ? !!data.invoice : !!data.defaultSettings?.observationFormData ); let itemsExists = $state( - !data.isCreate - ? !!(data.invoice?.items && data.invoice.items.length > 0) + !data.isCreate + ? !!(data.invoice?.items && data.invoice.items.length > 0) : !!data.defaultSettings?.itemsFormData?.items?.length ); let othersExists = $state( @@ -484,7 +487,7 @@ const actualResponse = response as any; const items = actualResponse.data?.items || []; - if (items.length === 0) { + if (items.length === 0) { if (!uiStore.isExchangeRateDialogOpen) { missingExchangeRateDate = date; showExchangeRateDialog = true; diff --git a/frontend/src/routes/dashboard/pedimentos/+page.svelte b/frontend/src/routes/dashboard/pedimentos/+page.svelte index dd9613e9..6898d88d 100644 --- a/frontend/src/routes/dashboard/pedimentos/+page.svelte +++ b/frontend/src/routes/dashboard/pedimentos/+page.svelte @@ -85,7 +85,7 @@ function handleRowClick(pedimento: Pedimento) { // Toggle: si ya está seleccionado, deseleccionar; si no, seleccionar - selectedId = selectedId === pedimento.id ? null : pedimento.id; + selectedId = selectedId === pedimento.id ? null : pedimento.id; } function handleEditSelected() { @@ -149,6 +149,11 @@ try { const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -194,7 +199,12 @@ error = null; try { - const companyId = companyStore.activeCompany?.id || 1; + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -248,7 +258,12 @@ error = null; try { - const companyId = companyStore.activeCompany.id; + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -334,17 +349,17 @@ -
+
+
+ + +
- -
- -
- + +
+ + +
+ + + +
+ + + + +
- + + {#if showPreview} +
+
+ {@html renderMarkdown(content)} +
+
+ {/if} + {:else} + +
+
+
+ {#if content_type === 'pdf'} +
+ +
+

Configuración de PDF

+ {:else if content_type === 'video'} +
+ +
+

Configuración de Video

+ {:else} +
+ +
+

Configuración de Documento

+ {/if} +

+ Sube el archivo que deseas asociar a este título. +

+
- - -
- - - {#if showPreview} -
-
- {@html renderMarkdown(content)} + {#if file_url} +
+
+
+ +
+
+

Archivo Cargado

+

{file_url}

+

+ {mime_type} • {(file_size ? (file_size / 1024 / 1024).toFixed(2) : '??')} MB +

+
+
+
+ + +
+
+ {:else} + + {/if}
{/if} diff --git a/start.sh b/start.sh index e699ea4d..9bb15911 100755 --- a/start.sh +++ b/start.sh @@ -77,8 +77,10 @@ if [ ! -f .env ]; then CENTRAL_URL="" CLIENT_ID="" SPOKE_URLS="" + HUB_MODE="true" else echo -e "${GREEN}Configurando como CLIENTE...${NC}" + HUB_MODE="false" read -p "Ingrese la URL del Hub [http://100.78.6.108:8001/api/v1/core/help-center/sync/]: " CENTRAL_URL CENTRAL_URL=${CENTRAL_URL:-http://100.78.6.108:8001/api/v1/core/help-center/sync/} read -p "Ingrese el UUID de este cliente (presione Enter para generar uno): " CLIENT_ID @@ -95,6 +97,12 @@ if [ ! -f .env ]; then sed -i "s|SPOKE_URLS=.*|SPOKE_URLS=$SPOKE_URLS|" .env sed -i "s|CLIENT_UUID=.*|CLIENT_UUID=$CLIENT_ID|" .env sed -i "s|SYNC_SECRET_TOKEN=.*|SYNC_SECRET_TOKEN=$SYNC_TOKEN|" .env + # Agregar o actualizar VITE_HUB_MODE + if grep -q "VITE_HUB_MODE=" .env; then + sed -i "s|VITE_HUB_MODE=.*|VITE_HUB_MODE=$HUB_MODE|" .env + else + echo "VITE_HUB_MODE=$HUB_MODE" >> .env + fi else echo -e "${YELLOW}⚠ .env.example no existe, creando .env básico${NC}" cat > .env < Date: Tue, 24 Feb 2026 08:17:38 -0600 Subject: [PATCH 27/54] feat: Enhance fixed asset class management with new fields, refactor forms, and update invoice-related services. --- .../7937209f9718_seed_initial_data.py | 2 + backend/api/v1/modules/a76/classes/dto.py | 1 + backend/api/v1/modules/a76/classes/service.py | 1 + .../modules/a76/invoices/catalog_service.py | 4 +- .../imports/temporary/validators/create.py | 17 + .../imports/temporary/validators/update.py | 24 ++ backend/api/v1/modules/a76/items/schemas.py | 6 +- backend/api/v1/modules/a76/items/service.py | 64 +++ .../invoices/services/database_helpers.py | 15 +- .../movements/invoices/services/definitive.py | 112 +++--- .../invoices/services/exchange_rate.py | 45 ++- .../movements/invoices/services/export.py | 87 ++-- .../invoices/services/export_repair.py | 52 +-- .../invoices/services/query_builders.py | 370 ++++++++++-------- .../movements/invoices/services/repair.py | 82 ++-- .../movements/invoices/services/temporary.py | 94 +++-- .../src/lib/api/dashboard/a24/fa_classes.ts | 2 +- frontend/src/lib/api/dashboard/a76/classes.ts | 2 + .../classes/forms/FixedAssetClassForm.svelte | 20 +- .../edit/items/fa/item-configuration.svelte | 122 +++--- .../edit/items/inv/item-sheet-inv.svelte | 62 ++- .../invoices/edit/items/items-tab-form.svelte | 179 ++++----- .../dashboard/invoices/edit/save-invoice.ts | 2 +- .../goods/fixed-asset-classes/+page.svelte | 301 ++++---------- .../dashboard/reports/invoices/+page.svelte | 13 +- 25 files changed, 910 insertions(+), 769 deletions(-) diff --git a/backend/alembic/versions/7937209f9718_seed_initial_data.py b/backend/alembic/versions/7937209f9718_seed_initial_data.py index 5bffa511..1a4f86ed 100644 --- a/backend/alembic/versions/7937209f9718_seed_initial_data.py +++ b/backend/alembic/versions/7937209f9718_seed_initial_data.py @@ -528,6 +528,7 @@ def upgrade() -> None: ) if values_historical_fractions: + op.execute("ALTER TABLE a76.historical_tariff_fractions DISABLE TRIGGER ALL;") op.execute( f""" INSERT INTO a76.historical_tariff_fractions @@ -539,6 +540,7 @@ def upgrade() -> None: ON CONFLICT DO NOTHING; """ ) + op.execute("ALTER TABLE a76.historical_tariff_fractions ENABLE TRIGGER ALL;") def downgrade() -> None: diff --git a/backend/api/v1/modules/a76/classes/dto.py b/backend/api/v1/modules/a76/classes/dto.py index 00c141b4..68054f2a 100644 --- a/backend/api/v1/modules/a76/classes/dto.py +++ b/backend/api/v1/modules/a76/classes/dto.py @@ -223,6 +223,7 @@ class ClassWithFADataResponse(BaseModel): fa_class_id: Optional[int] = None depreciation_rate: Optional[Decimal] = None fda_code: Optional[str] = None + eccn_code: Optional[str] = None class_enabled: Optional[bool] = None model_config = ConfigDict(from_attributes=True) \ No newline at end of file diff --git a/backend/api/v1/modules/a76/classes/service.py b/backend/api/v1/modules/a76/classes/service.py index 1e3ba949..4decee1c 100644 --- a/backend/api/v1/modules/a76/classes/service.py +++ b/backend/api/v1/modules/a76/classes/service.py @@ -152,6 +152,7 @@ class ClassService: "fa_class_id": fa_class.id if fa_class else None, "depreciation_rate": fa_class.depreciation_rate if fa_class else None, "fda_code": fa_class.fda_code if fa_class else None, + "eccn_code": fa_class.eccn_code if fa_class else None, "class_enabled": fa_class.class_enabled if fa_class else None, } combined.append(class_dict) diff --git a/backend/api/v1/modules/a76/invoices/catalog_service.py b/backend/api/v1/modules/a76/invoices/catalog_service.py index 9ad64b0b..2dee90a7 100644 --- a/backend/api/v1/modules/a76/invoices/catalog_service.py +++ b/backend/api/v1/modules/a76/invoices/catalog_service.py @@ -134,12 +134,14 @@ class InvoiceCatalogService: # Drivers try: - drivers, _ = DriverService.get_all(db, tenant_id, company_id, limit=1000) + drivers = DriverService.list_drivers(db, str(company_id), str(tenant_id)) response.drivers = [ DriverResponseDTO.model_validate(d) for d in drivers ] except Exception as e: print(f"Error fetching drivers: {e}") + # Initialize drivers as empty list if an error occurs + drivers = [] # Trailers try: diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py index 70dc5245..677df0ed 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py @@ -188,6 +188,23 @@ def validate_create( line.financial.unit_cost_mxn = unit_cost_capture # Si es otro tipo de moneda, dejamos el costo como está + # Calcular valores totales basados en cantidad y costo unitario + quantity = line.quantity.quantity or Decimal("0") + + # Valor Comercial + if line.financial.unit_cost_usd is not None: + line.financial.value_usd = line.financial.unit_cost_usd * quantity + if line.financial.unit_cost_mxn is not None: + line.financial.value_mxn = line.financial.unit_cost_mxn * quantity + + # Valor Aduanas (asumiendo que es igual al Valor Comercial por defecto) + line.financial.customs_value_usd = line.financial.value_usd + line.financial.customs_value_mxn = line.financial.value_mxn + + # Valor MP Temp (Materia Prima Temporal) + line.financial.value_temp_material_usd = line.financial.value_usd + line.financial.value_temp_material_mxn = line.financial.value_mxn + # ========================================== # VALIDAR Y CONVERTIR PESOS NETOS # ========================================== diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py index 1f5b917e..23717f2d 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py @@ -64,6 +64,30 @@ def validate_update( # Costo unitario if line.financial.unit_cost_capture is None: line.financial.unit_cost_capture = existing_line.financial.unit_cost_capture + + # Recalcular valores monetarios si el costo o la cantidad cambian + currency_type = invoice.financials.currency_type + unit_cost_capture = line.financial.unit_cost_capture or Decimal("0") + + if currency_type in ["USD", "ME"]: + line.financial.unit_cost_usd = unit_cost_capture + line.financial.unit_cost_mxn = unit_cost_capture * exchange_rate + elif currency_type in ["MXN", "MN"]: + line.financial.unit_cost_usd = (unit_cost_capture / exchange_rate) if exchange_rate else Decimal("0") + line.financial.unit_cost_mxn = unit_cost_capture + + quantity = line.quantity.quantity if line.quantity.quantity is not None else existing_line.quantity.quantity + + if line.financial.unit_cost_usd is not None: + line.financial.value_usd = line.financial.unit_cost_usd * quantity + if line.financial.unit_cost_mxn is not None: + line.financial.value_mxn = line.financial.unit_cost_mxn * quantity + + line.financial.customs_value_usd = line.financial.value_usd + line.financial.customs_value_mxn = line.financial.value_mxn + + line.financial.value_temp_material_usd = line.financial.value_usd + line.financial.value_temp_material_mxn = line.financial.value_mxn # Convertir peso neto si se proporcionó invoice_weight_type = invoice.logistics.weight_type diff --git a/backend/api/v1/modules/a76/items/schemas.py b/backend/api/v1/modules/a76/items/schemas.py index cad3a134..b54c914b 100644 --- a/backend/api/v1/modules/a76/items/schemas.py +++ b/backend/api/v1/modules/a76/items/schemas.py @@ -4,7 +4,7 @@ Complete nested one-to-one structure: LineItem -> LineFinancial -> LineQuantity -> LineCustoms -> LineDescription -> LineReference """ -from typing import Any, Optional +from typing import Any, Optional, Union from datetime import datetime from decimal import Decimal from pydantic import BaseModel, Field, ConfigDict, model_validator @@ -58,13 +58,13 @@ class LineItemBase(BaseModel): line_number: int = Field(..., description="Line number") # Part identification - part_number_id: Optional[int] = Field( + part_number_id: Union[int, str, None] = Field( None, description="Part number", alias="part_number", serialization_alias="part_number_id", ) - component_part_number_id: Optional[int] = Field( + component_part_number_id: Union[int, str, None] = Field( None, description="Component part number", alias="component_part_number", diff --git a/backend/api/v1/modules/a76/items/service.py b/backend/api/v1/modules/a76/items/service.py index bf8321af..f75fa1d6 100644 --- a/backend/api/v1/modules/a76/items/service.py +++ b/backend/api/v1/modules/a76/items/service.py @@ -36,6 +36,7 @@ from .line_references.models import LineReference from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem from .models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader +from api.v1.modules.a76.parts.models import Part logger = logging.getLogger(__name__) @@ -45,6 +46,33 @@ class ItemService: Service for managing Items and related entities with tenant/company isolation """ + @staticmethod + def _resolve_part_number( + db: Session, + part_number: Optional[str], + tenant_id: int, + company_id: int, + ) -> Optional[int]: + """Try to resolve a part number string to its database ID.""" + if not part_number: + return None + + # If it's already an integer (or a string representing an integer), it might be the ID + try: + return int(part_number) + except (ValueError, TypeError): + # It's a string part number (e.g., "MAQ-001"), look it up + part = ( + db.query(Part) + .filter( + Part.part_number == part_number, + Part.tenant_id == tenant_id, + Part.company_id == company_id, + ) + .first() + ) + return part.id if part else None + @staticmethod def _get_next_line_number(db: Session, invoice_id: int) -> int: """Calculate the next line_number for a given invoice based on database.""" @@ -282,6 +310,24 @@ class ItemService: # Calculate the next line number for this single item line_number = ItemService._get_next_line_number(db, item_data.invoice_id) + # Resolve part ID if a string is provided in part_number (alias for part_number_id) + if item_data.part_number_id and not isinstance(item_data.part_number_id, int): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.part_number_id = resolved_id + + # Resolve component part ID + if item_data.component_part_number_id and not isinstance( + item_data.component_part_number_id, int + ): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.component_part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.component_part_number_id = resolved_id + # Validar el item validate_create( db, @@ -378,6 +424,24 @@ class ItemService: ): errors.raise_if_errors("Error al actualizar el item") + # Resolve part ID if a string is provided in part_number (alias for part_number_id) + if hasattr(item_data, 'part_number_id') and item_data.part_number_id and not isinstance(item_data.part_number_id, int): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.part_number_id = resolved_id + + # Resolve component part ID + if hasattr(item_data, 'component_part_number_id') and item_data.component_part_number_id and not isinstance( + item_data.component_part_number_id, int + ): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.component_part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.component_part_number_id = resolved_id + # Validar el item que se va a actualizar validate_update( db, diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py index 024d23c3..e6ab3db8 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py @@ -112,9 +112,10 @@ class DatabaseHelper: try: sql = text(""" - SELECT name, rfc - FROM a76.clients_and_providers - WHERE id = :client_code AND client_or_provider = :client_type + SELECT cp.name, cp.rfc, cpp.tax_id + FROM a76.clients_and_providers cp + LEFT JOIN a76.clients_and_providers_programs cpp ON cpp.client_id = cp.id + WHERE cp.id = :client_code AND cp.client_or_provider = :client_type """) result = db.execute(sql, {"client_code": client_code, "client_type": client_type}).fetchone() @@ -122,7 +123,7 @@ class DatabaseHelper: return { "name": result[0], "rfc": result[1], - "tax_id": None # Column does not exist in this table + "tax_id": result[2] } else: logger.debug(f"Client {client_code} not found as {client_type}") @@ -233,8 +234,7 @@ class DatabaseHelper: SELECT serial_numbers, model, brand FROM a76.item_line_series ils INNER JOIN a76.item_lines il ON ils.line_item_id = il.id - INNER JOIN a76.items i ON il.item_id = i.id - WHERE i.invoice_id = :invoice_id + WHERE il.invoice_id = :invoice_id AND il.line_number = :linea ORDER BY ils.id LIMIT 1 @@ -290,8 +290,7 @@ class DatabaseHelper: SELECT serial_numbers, model, expo_brad FROM a76.item_line_series ils INNER JOIN a76.item_lines il ON ils.line_item_id = il.id - INNER JOIN a76.items i ON il.item_id = i.id - WHERE i.invoice_id = :invoice_id + WHERE il.invoice_id = :invoice_id AND il.line_number = :linea ORDER BY ils.id LIMIT 1 diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py index 927eaf09..dd710d24 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -89,6 +89,11 @@ class DefinitiveImportService: # Totals come directly from GROUP BY query (no N+1 problem) total_me = to_float(row[28]) # total_me from SUM aggregation total_mn = to_float(row[29]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[30]) + sum_value_mxn = to_float(row[31]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -215,58 +220,58 @@ class DefinitiveImportService: valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( db=db, db_name=filters.database_name, - es_subpartida=row[39], # EsSubPartida - valor_me=row[26], - valor_mn_direct=row[24], - fecha_pago=row[12], - fecha_inicio=row[10], - clave_ped=row[58], - tipo_cambio_partida=row[50], + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=row[26], # C27 - ValorImpoME + valor_mn_direct=row[24], # C25 - ValorImpoMN + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C1 entry_date + clave_ped=row[57] if len(row) > 57 else '', # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, met_trans=met_trans ) # Set peso values based on subpartida flag - if row[39] == 'P': - peso_neto = float(row[28]) if row[28] else 0.0 - peso_bruto = float(row[29]) if row[29] else 0.0 + if row[39] == 'P': # C40 - EsSubPartida + peso_neto = float(row[28]) if row[28] else 0.0 # C29 + peso_bruto = float(row[29]) if row[29] else 0.0 # C30 else: peso_neto = 0.0 peso_bruto = 0.0 series_info = DatabaseHelper.get_series_info( - db, filters.database_name, row[34], row[44], filters.is_shelter + db, filters.database_name, row[38], row[43], filters.is_shelter # C39, C44 ) simbolo_ex = None - if row[19]: + if row[48]: # C49 - Part Number simbolo_ex = DatabaseHelper.get_part_export_symbol( - db, filters.database_name, row[19], filters.is_shelter + db, filters.database_name, row[48], filters.is_shelter ) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( - db, row[1], row[41], filters.is_shelter + db, row[1], row[40], filters.is_shelter # C2, C41 ) num_gaf_uni = DatabaseHelper.get_driver_badge( - db, filters.database_name, row[0] + db, filters.database_name, row[0] # C1 ) movement = MovementItemDetailed( - Linea=row[44], - Factura=row[0], - Pedimento=row[1], - FechaFactura=row[2], - Estatus=row[3], - ClavePed=row[4], + Linea=row[43], # C44 + Factura=row[0], # C1 + Pedimento=row[1], # C2 + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 TipoMovTemDef='IMPDF', EsCambioRegimen='N', - Regimen=row[9], - Fecha_Inicio=row[10], - Fecha_Fin=row[11], - Fecha_Pago=row[12], - Remesa=row[13], + Regimen=row[9], # C10 + Fecha_Inicio=parse_yyyymmdd_date(row[10]), # C11 + Fecha_Fin=parse_yyyymmdd_date(row[11]), # C12 + Fecha_Pago=parse_yyyymmdd_date(row[12]), # C13 + Remesa=str(row[13]) if row[13] is not None else None, # C14 Proveedor=row[7], # C8 - Provider name (from JOIN) RFCProveedor=proveedor_info.get('rfc'), ProveedorTaxID=proveedor_info.get('tax_id'), @@ -275,42 +280,42 @@ class DefinitiveImportService: VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[19], - DescripcionE=StringHelper.clean_text(row[20]), - DescripcionI=StringHelper.clean_text(row[21]), - CantidadIE=float(row[22]) if row[22] else 0.0, - UniMed=row[23], + NumParte=row[48], # C49 + DescripcionE=StringHelper.clean_text(row[20]), # C21 + DescripcionI=StringHelper.clean_text(row[21]), # C22 + CantidadIE=float(row[22]) if row[22] else 0.0, # C23 + UniMed=row[23], # C24 ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, - OrdenCompraVenta=row[30], - FraccionArancelaria=row[31], - Preferencia=row[32], - Sector=None, # row[34] is invoice ID, Sector not in query - PaisOrigen=row[37], + OrdenCompraVenta=row[30], # C31 + FraccionArancelaria=row[31], # C32 + Preferencia=row[32], # C33 + Sector=row[34], # C35 + PaisOrigen=row[36], # C37 Aduana=aduana_nombre, - Advalorem=row[39], + Advalorem='P' if row[39] == 'P' else 'S', # C40 TipoExpo='', PedimentoR1=pedimento_r1, - EDocument=row[42], - NumOperacionVU=row[43], + EDocument=row[41], # C42 + NumOperacionVU=row[42], # C43 Series=series_info, - Marca=StringHelper.clean_text(row[45]), - Modelo=StringHelper.clean_text(row[46]), - FraccionAmericana=row[47], - ECCN=row[48], + Marca=StringHelper.clean_text(row[44]), # C45 + Modelo=StringHelper.clean_text(row[45]), # C46 + FraccionAmericana=row[46], # C47 + ECCN=row[47], # C48 SimboloEx=simbolo_ex, - FechaEmision=row[51], + FechaEmision=parse_yyyymmdd_date(row[50]) if row[50] else None, # C51 BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, - UsuarioCap=row[52], - UsuarioAcr=row[53], - Transportista=row[54], - NumCaja=row[55], - Pedimento18=row[56], - AduanaCru=row[38], - Lote=row[57] + UsuarioCap=row[51], # C52 + UsuarioAcr=row[52], # C53 + Transportista=row[53], # C54 + NumCaja=row[54], # C55 + Pedimento18=row[55] if len(row) > 55 else '', # C56 + AduanaCru=row[37], # C38 + Lote=row[56] if len(row) > 56 else '' # C57 ) movements.append(movement) @@ -337,7 +342,7 @@ class DefinitiveImportService: if filters.range_type.value == "FF": where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") else: - where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") # Note: Status filter applied at Python level after CASE WHEN in SELECT # because is_updated doesn't directly represent AC/NA status @@ -367,8 +372,7 @@ class DefinitiveImportService: COALESCE(SUM(lf.value_mxn), 0) FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo AND COALESCE(il.is_subpartida, false) = false """) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py index 656c8869..5c9f2010 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py @@ -65,13 +65,14 @@ class ExchangeRateCalculator: fecha_pago=fecha_pago, fecha_inicio=fecha_inicio, tipo_pedimento=clave_ped, - use_transport_method=True, # Always use for detailed calculations + use_transport_method=True, met_trans=met_trans ) tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) if tc_value: tipo_cambio_final = tc_value + # For ME, the value is always in foreign currency (USD) return (valor_comercial, tipo_cambio_final) # Handle local currency (MN) case @@ -86,14 +87,14 @@ class ExchangeRateCalculator: tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) if tc_value and valor_me is not None: - # Calculate MN value from ME * exchange rate + # Calculate MN value from ME * payment date exchange rate return (valor_me * tc_value, tc_value) else: - # Fall back to direct MN value and partida exchange rate if tc_value is None: logger.warning(f"Exchange rate not found for date {fecha_tc}, using partida values") return (valor_mn_direct or 0.0, tipo_cambio_partida) else: + # exchange_rate_type == "FT" (Invoice Date) # Use direct MN value and partida exchange rate return (valor_mn_direct or 0.0, tipo_cambio_partida) @@ -151,22 +152,42 @@ class ExchangeRateCalculator: use_transport_method=use_transport_method, met_trans=met_trans ) - # For Shelter + FP: validate exchange rate exists (Clarion logic) tc_value = DatabaseHelper.get_exchange_rate( db, db_name, fecha_tc, is_shelter=is_shelter, - raise_on_missing=is_shelter # Raise error if shelter and not found + raise_on_missing=is_shelter ) if tc_value: - return (valor_me * tc_value, tc_value) + # For ME, the value is always in foreign currency (USD). Just return the new exchange rate. + return (valor_comercial, tc_value) else: logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") - return (valor_mn, tipo_cambio_db) - else: - # FT or no payment date: use DB values - return (valor_comercial, tipo_cambio) - + + return (valor_comercial, tipo_cambio) + # Local currency case else: - return (valor_mn, tipo_cambio_db) + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + use_transport_method=use_transport_method, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate( + db, db_name, fecha_tc, + is_shelter=is_shelter, + raise_on_missing=is_shelter + ) + + if tc_value and valor_me is not None: + # Calculate MN value from ME * payment date exchange rate + return (valor_me * tc_value, tc_value) + else: + if tc_value is None: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + return (valor_mn, tipo_cambio_db) + else: + return (valor_mn, tipo_cambio_db) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index bec76370..17ceb6f9 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -73,8 +73,18 @@ class ExportService: consecutivo = row[16] # C35 - Consecutivo # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[24] # total_me from SUM aggregation - total_mn = row[25] # total_mn from SUM aggregation + def to_float(val): + if val is None or val == '': return 0.0 + try: return float(val) + except (ValueError, TypeError): return 0.0 + + total_me = to_float(row[24]) # total_me from SUM aggregation + total_mn = to_float(row[25]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[27]) + sum_value_mxn = to_float(row[28]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -243,19 +253,19 @@ class ExportService: # Build detailed movement item movement = MovementItemDetailed( - Linea=row[41], # C42 - LineaExpo - Factura=row[0], # C1 - FacturaExpo - Pedimento=row[1], # C2 - PedimentoExpo - FechaFactura=row[2], # C3 - FechaFactura - Estatus=row[5], # C6 - Estatus - ClavePed=row[6], # C7 - ClavePed - TipoMovTemDef=row[33], # C34 - TipoFactura + Linea=row[39], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef=row[31], # C34 - TipoFactura EsCambioRegimen='N', - Regimen=row[7], # C8 - Regimen - Fecha_Inicio=row[8], # C9 - Fecha_Inicio - Fecha_Fin=row[9], # C10 - Fecha_Fin - Fecha_Pago=row[10], # C11 - Fecha_Pago - Remesa=row[11], # C12 - Remesa + Regimen=row[5], # C6 - Regime (Shared index with Estatus in this query) + Fecha_Inicio=parse_yyyymmdd_date(row[6]), # C7 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[7]), # C8 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[8]), # C9 - Fecha_Pago + Remesa=row[9], # C12 - Remesa TipoCambio=tipo_cambio_final, Proveedor=proveedor_info.get("name"), RFCProveedor=proveedor_info.get("rfc"), @@ -265,41 +275,42 @@ class ExportService: VendidoATaxID=vendido_info.get("tax_id"), AgenteAduanal=agente_info.get("name"), Patente=agente_info.get("license"), - NumParte=row[17], # C18 - Clase + NumParte=row[17], # C18 - NumParte DescripcionE=StringHelper.remove_commas(row[18]), # C19 - DescripcionE DescripcionI=StringHelper.remove_commas(row[19]), # C20 - DescripcionI - CantidadIE=row[20], # C21 - CantExpo - UniMed=row[21], # C22 - UnidadMedida + CantidadIE=row[20], # C21 - CantExpo + UniMed=row[21], # C22 - UnidadMedida ValorComercialMN=valor_mn, PesoNeto=peso_neto_final, PesoBruto=peso_bruto_final, - OrdenCompraVenta=row[26], # C27 - OrdenCompra - FraccionArancelaria=row[27], # C28 - FraccionExpo - Preferencia=row[28], # C29 - TipoFraccion - Sector=row[30], # C31 - Sector - PaisOrigen=row[31], # C32 - PaisOrigen + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen Aduana=customs_name, - Advalorem=row[37], # C38 - EsSubPartida + Advalorem=row[27], # C30 - Advalorem TipoExpo='EXPO DEF', PedimentoR1=rectified_pedimento, - EDocument=row[39], # C40 - EDocument - NumOperacionVU=row[40], # C41 - NumOperacionVU + EDocument=row[37], # C40 - EDocument + NumOperacionVU=row[38], # C41 - NumOperacionVU Series=series_info, - Marca=row[42], # C43 - Marca - Modelo=row[43], # C44 - Modelo - FraccionAmericana=row[44], # C45 - FraccionAme - ECCN=row[45], # C46 - ECCN - FechaEmision=row[48], # C49 - FechaEmision + Marca=StringHelper.clean_text(row[40]), # C43 - Marca + Modelo=StringHelper.clean_text(row[41]), # C44 - Modelo + FraccionAmericana=row[42], # C45 - FraccionAme + ECCN=row[43], # C46 - ECCN + FechaEmision=parse_yyyymmdd_date(row[46]) if row[46] else None, # C49 - FechaEmision BaseDeDatos=filters.database_name, NumGafUni=driver_badge, - UsuarioCap=row[49], # C50 - UsuarioCap - UsuarioAcr=row[50], # C51 - UsuarioAct - Transportista=row[51], # C52 - Transportista - NumCaja=row[52], # C53 - Transporte + NumTrasporte - Pedimento18=row[53], # C54 - Pedimento18 - AduanaCru=row[32], # C33 - Aduana_Cruce - Lote=row[54] # C55 - Lote + UsuarioCap=row[47], # C50 - UsuarioCap + UsuarioAcr=row[48], # C51 - UsuarioAct + Transportista=row[49], # C52 - Carrier ID (derived from log.transport_id) + NumCaja=row[50], # C53 - log.transport_id || log.transport_num + Pedimento18=row[51], # C54 - empty + AduanaCru=row[30], # C33 - Aduana_Cruce + Lote=row[52] if len(row) > 52 else '' # C55 - Lote ) + movements.append(movement) @@ -342,7 +353,7 @@ class ExportService: logger.debug("Including cancelled invoices (include_cancelled = true)") # Date range - date_field = "ih.invoice_date" if filters.range_type.value == "FF" else "log.payment_date" + date_field = "ih.invoice_date" if filters.range_type.value == "FF" else "pd.payment_date" conditions.append(f"{date_field} >= TO_DATE('{filters.start_date}', 'YYYYMMDD')") conditions.append(f"{date_field} <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 58743e80..98b33a0f 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -102,8 +102,18 @@ class ExportRepairService: consecutivo = row[15] # C35 - Consecutivo # Totals come directly from GROUP BY query (no N+1 problem) - total_me = row[24] # total_me - total_mn = row[25] # total_mn + def to_float(val): + if val is None or val == '': return 0.0 + try: return float(val) + except (ValueError, TypeError): return 0.0 + + total_me = to_float(row[24]) # total_me + total_mn = to_float(row[25]) # total_mn + sum_value_usd = to_float(row[27]) + sum_value_mxn = to_float(row[28]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -294,9 +304,9 @@ class ExportRepairService: TipoMovTemDef=row[33], # C34 - TipoFactura EsCambioRegimen='N', Regimen=row[7], # C8 - Regimen - Fecha_Inicio=row[8], # C9 - Fecha_Inicio - Fecha_Fin=row[9], # C10 - Fecha_Fin - Fecha_Pago=row[10], # C11 - Fecha_Pago + Fecha_Inicio=parse_yyyymmdd_date(row[8]), # C9 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[9]), # C10 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[10]), # C11 - Fecha_Pago Remesa=row[11], # C12 - Remesa Proveedor=proveedor_info.get('name'), RFCProveedor=proveedor_info.get('rfc'), @@ -306,7 +316,7 @@ class ExportRepairService: VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[17], # C18 - Clase (NumParte) + NumParte=row[46], # C47 - NumParte DescripcionE=StringHelper.clean_text(row[18]), # C19 DescripcionI=StringHelper.clean_text(row[19]), # C20 CantidadIE=float(row[20]) if row[20] else 0.0, # C21 @@ -332,7 +342,7 @@ class ExportRepairService: FraccionAmericana=row[44], # C45 - FraccionAme ECCN=row[45], # C46 - ECCN SimboloEx=simbolo_ex, - FechaEmision=row[48], # C49 - FechaFactura + FechaEmision=parse_yyyymmdd_date(row[48]) if row[48] else None, # C49 - FechaFactura BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, UsuarioCap=row[49], # C50 - UsuarioCap @@ -341,7 +351,7 @@ class ExportRepairService: NumCaja=row[52], # C53 - Transporte + NumTrasporte Pedimento18=row[53], # C54 - Pedimento18 AduanaCru=row[32], # C33 - Aduana_Cruce - Lote=row[54] # C55 - Lote + Lote=row[54] if len(row) > 54 else '' # C55 - Lote ) movements.append(movement) @@ -369,7 +379,7 @@ class ExportRepairService: if filters.range_type.value == "FF": where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") else: - where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") # Provider filter if filters.provider: @@ -391,30 +401,6 @@ class ExportRepairService: return " AND ".join(where_conditions) - def _calculate_totals(self, db: Session, db_name: str, consecutivo: int, discharge_filter: str) -> tuple: - """Calculate totals for main partidas with discharge filter.""" - discharge_clause = "" - if discharge_filter == "SiDes": - discharge_clause = " AND il.is_discharged = true" - elif discharge_filter == "NoDes": - discharge_clause = " AND il.is_discharged = false" - - sql = text(f""" - SELECT - COALESCE(SUM(lf.value_usd), 0), - COALESCE(SUM(lf.value_mxn), 0) - FROM a76.item_line_financials lf - INNER JOIN a76.item_lines il ON il.id = lf.item_line_id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo - AND il.is_subpart = false - {discharge_clause} - """) - - result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() - total_me = float(result[0]) if result and result[0] is not None else 0.0 - total_mn = float(result[1]) if result and result[1] is not None else 0.0 - return total_me, total_mn def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index b935e039..6e14c659 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -19,9 +19,9 @@ class TemporaryImportQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, COALESCE(ped.pedimento_code, '') AS C5, COALESCE(ped.regime, '') AS C10, - COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, - COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, COALESCE(cmp.remesa, 0) AS C14, COALESCE(fin.exchange_rate, 0) AS C15, COALESCE(cmp.provider_id::text, '') AS C16, @@ -49,7 +49,9 @@ class TemporaryImportQueries: COALESCE(fin.value_mn, 0) AS total_mn, COALESCE(lf_agg.sum_value_mxn, 0) AS valor_comercial_mn, COALESCE(lf_agg.sum_value_temp_mxn, 0) AS valor_mp_temp_mn, - COALESCE(lf_agg.sum_value_added_mxn, 0) AS valor_agre_mn + COALESCE(lf_agg.sum_value_added_mxn, 0) AS valor_agre_mn, + COALESCE(lf_agg.sum_value_temp_usd, 0) AS valor_mp_temp_usd, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -62,15 +64,17 @@ class TemporaryImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id LEFT JOIN ( - SELECT i.invoice_id, + SELECT il.invoice_id, SUM(COALESCE(lf.value_mxn, 0)) AS sum_value_mxn, SUM(COALESCE(lf.value_temp_material_mxn, 0)) AS sum_value_temp_mxn, - SUM(COALESCE(lf.value_added_mxn, 0)) AS sum_value_added_mxn - FROM a76.items i - JOIN a76.item_lines il ON il.item_id = i.id + SUM(COALESCE(lf.value_added_mxn, 0)) AS sum_value_added_mxn, + SUM(COALESCE(lf.value_temp_material_usd, 0)) AS sum_value_temp_usd, + SUM(COALESCE(lf.value_usd, 0)) AS sum_value_usd + FROM a76.item_lines il JOIN a76.item_line_financials lf ON lf.item_line_id = il.id - GROUP BY i.invoice_id + GROUP BY il.invoice_id ) lf_agg ON lf_agg.invoice_id = ih.id WHERE ih.operation_type = 'imp' AND ih.invoice_type = 'TEM' @@ -95,9 +99,9 @@ class TemporaryImportQueries: COALESCE(prov.name, '') AS C8, COALESCE(client.name, '') AS C9, COALESCE(ped.regime, '') AS C10, - COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, - COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, COALESCE(cmp.remesa, 0) AS C14, COALESCE(fin.exchange_rate, 0) AS C15, COALESCE(cmp.provider_id::text, '') AS C16, @@ -115,16 +119,16 @@ class TemporaryImportQueries: COALESCE(lf.customs_value_usd, 0) AS C28, COALESCE(lq.net_weight, 0) AS C29, COALESCE(lq.gross_weight, 0) AS C30, - COALESCE(ih.purchase_order, '') AS C31, + COALESCE(il.order, ih.purchase_order, '') AS C31, COALESCE(lc.fraction, '') AS C32, COALESCE(lc.fraction_type, '') AS C33, COALESCE(lc.advalorem_numeric, 0) AS C34, - COALESCE(lc.sector, '') AS C35, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C35, COALESCE(lf.igi_amount_usd, 0) AS C36, COALESCE(lc.origin_country, '') AS C37, COALESCE(cmp.aduana, '') AS C38, ih.id AS C39, - FALSE AS C40, + COALESCE(il.material_type, 'P') AS C40, COALESCE( ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, @@ -133,11 +137,11 @@ class TemporaryImportQueries: cmp.edocument AS C42, -- [41] cmp.vucem_operation_num AS C43, -- [42] COALESCE(il.line_number, 0) AS C44, - '' AS C45, - '' AS C46, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C46, COALESCE(cls.us_fraction, '') AS C47, - COALESCE(prt.eccn, '') AS C48, - COALESCE(il.part_number::text, '') AS C49, + COALESCE(prt.eccn, fac.eccn_code, '') AS C48, + COALESCE(prt.part_number::text, '') AS C49, COALESCE(fin.exchange_rate, 0) AS C50, COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, COALESCE(ih.capture_user, '') AS C52, @@ -145,8 +149,10 @@ class TemporaryImportQueries: COALESCE(log.carrier_id, '') AS C54, COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, '' AS C56, - '' AS C57, - '' AS C58 + COALESCE(ld.lot, '') AS C57, + '' AS C58, + COALESCE(lf.value_temp_material_mxn, 0) AS C59, + COALESCE(lf.value_temp_material_usd, 0) AS C60 FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -159,16 +165,18 @@ class TemporaryImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id - LEFT JOIN a76.items i ON i.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id LEFT JOIN a76.classes cls ON cls.id = il.class_id - LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE ih.operation_type = 'imp' AND ih.invoice_type = 'TEM' @@ -225,9 +233,9 @@ class DefinitiveImportQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, COALESCE(ped.pedimento_code, '') AS C5, COALESCE(ped.regime, '') AS C10, - COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, - COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, COALESCE(log.payment_receipt_num, '') AS C14, COALESCE(fin.exchange_rate, 0) AS C15, COALESCE(cmp.provider_id::text, '') AS C16, @@ -252,7 +260,9 @@ class DefinitiveImportQueries: '' AS C58, '' AS C59, COALESCE(fin.value_me, 0) AS total_me, - COALESCE(fin.value_mn, 0) AS total_mn + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -265,6 +275,16 @@ class DefinitiveImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id WHERE ih.operation_type = 'imp' AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') AND {where_clause} @@ -273,70 +293,73 @@ class DefinitiveImportQueries: @staticmethod def build_main_query(db_name: str, where_clause: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL for definitive imports.""" return f""" SELECT - ih.invoice_number AS C1, -- [0] - ped.pedimento_number AS C2, -- [1] - ih.invoice_date AS C3, -- [2] - ped.status AS C4, -- [3] - ped.pedimento_code AS C5, -- [4] - '' AS C6, -- [5] - '' AS C7, -- [6] - COALESCE(prov.name, '') AS C8, -- [7] Provider name - COALESCE(client.name, '') AS C9, -- [8] Client name - ped.regime AS C10, -- [9] - log.entry_exit_date AS C11, -- [10] - log.delivery_date AS C12, -- [11] - log.payment_date AS C13, -- [12] - log.payment_receipt_num AS C14, -- [13] - '' AS C15, -- [14] - cmp.provider_id AS C16, -- [15] - cmp.sold_to_id AS C17, -- [16] - cmp.customs_broker_id AS C18, -- [17] - '' AS C19, -- [18] - prt.part_number AS C20, -- [19] - ld.description_spanish AS C21, -- [20] - ld.description_english AS C22, -- [21] - lq.quantity AS C23, -- [22] - um.code AS C24, -- [23] - lf.value_mxn AS C25, -- [24] - '' AS C26, -- [25] - lf.value_usd AS C27, -- [26] - '' AS C28, -- [27] - lq.net_weight AS C29, -- [28] - lq.gross_weight AS C30, -- [29] - ih.purchase_order AS C31, -- [30] - lc.fraction AS C32, -- [31] - '' AS C33, '' AS C34, -- [32-33] - ih.id AS C35, -- [34] - '' AS C36, '' AS C37, -- [35-36] - lc.origin_country AS C38, -- [37] - cmp.aduana AS C39, -- [38] - il.material_type AS C40, -- [39] - il.id AS C41, -- [40] + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(prov.name, '') AS C8, + COALESCE(client.name, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(um.code, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(il.order, ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(il.material_type, 'P') AS C40, COALESCE( ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, '' - ) AS C42, -- [41] rectification_id - cmp.edocument AS C43, -- [42] - cmp.vucem_operation_num AS C44, -- [43] - il.line_number AS C45, -- [44] - ld.brand AS C46, -- [45] - ld.model AS C47, -- [46] - prt.us_fraction AS C48, -- [47] - prt.eccn AS C49, -- [48] - prt.id AS C50, -- [49] - fin.exchange_rate AS C51, -- [50] - ih.emission_date AS C52, -- [51] - ih.capture_user AS C53, -- [52] - ih.who_updated AS C54, -- [53] - '' AS C55, -- [54] - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, -- [55] - '' AS C57, -- [56] Pedimento18 (row[56]) - COALESCE(ld.lot, '') AS C58, -- [57] Lote (row[57]) - '' AS C59, -- [58] TipoPed (row[58]) - '' AS C60 -- [59] Relleno final + ) AS C41, + cmp.edocument AS C42, + cmp.vucem_operation_num AS C43, + COALESCE(il.line_number, 0) AS C44, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, fac.eccn_code, '') AS C48, + COALESCE(prt.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C55, + '' AS C56, + COALESCE(ld.lot, '') AS C57, + '' AS C58, + 0 AS C59, + 0 AS C60 FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -349,16 +372,18 @@ class DefinitiveImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id - LEFT JOIN a76.items itm ON itm.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id LEFT JOIN a76.classes cls ON cls.id = il.class_id - LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE {where_clause} ORDER BY ih.invoice_number, il.line_number @@ -374,8 +399,7 @@ class DefinitiveImportQueries: FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo """ @@ -425,7 +449,7 @@ class RepairImportQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C5, COALESCE(ped.pedimento_code, '') AS C6, COALESCE(ped.regime, '') AS C7, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C9, COALESCE(cmp.remesa::text, '') AS C10, COALESCE(fin.exchange_rate, 0) AS C11, COALESCE(cmp.provider_id::text, '') AS C12, @@ -449,7 +473,9 @@ class RepairImportQueries: ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, '' - ) AS C48 + ) AS C48, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -462,13 +488,23 @@ class RepairImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE 1=1 {discharge_filter} + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id WHERE ih.operation_type = 'imp' AND COALESCE(cmp.is_regime_change, false) = false AND EXISTS ( - SELECT 1 FROM a76.items i2 - INNER JOIN a76.item_lines il2 ON il2.item_id = i2.id + SELECT 1 FROM a76.item_lines il2 INNER JOIN a24.fa_item_lines fil2 ON fil2.id = il2.id - WHERE i2.invoice_id = ih.id AND fil2.search_invoice IS NOT NULL + WHERE il2.invoice_id = ih.id AND fil2.search_invoice IS NOT NULL {discharge_filter} ) {"AND " + where_str if where_str else ""} @@ -494,14 +530,15 @@ class RepairImportQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END, COALESCE(ped.pedimento_code, ''), COALESCE(ped.regime, ''), - '', - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), ''), + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), ''), + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), ''), COALESCE(cmp.remesa::text, ''), COALESCE(fin.exchange_rate, 0), COALESCE(cmp.provider_id::text, ''), COALESCE(cmp.sold_to_id::text, ''), COALESCE(cmp.customs_broker_id::text, ''), - COALESCE(il.part_number::text, ''), + COALESCE(prt.part_number::text, ''), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), COALESCE(lq.quantity, 0), @@ -510,14 +547,14 @@ class RepairImportQueries: COALESCE(lf.value_usd, 0), COALESCE(lq.net_weight, 0), COALESCE(lq.gross_weight, 0), - COALESCE(ih.purchase_order, ''), + COALESCE(il.order, ih.purchase_order, ''), COALESCE(lc.fraction, ''), '', - COALESCE(lc.sector, ''), + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), ''), COALESCE(lc.origin_country, ''), COALESCE(ped.customs_office, ''), ih.id, - 'P', + COALESCE(il.material_type, 'P'), COALESCE( ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, @@ -528,7 +565,7 @@ class RepairImportQueries: REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), COALESCE(lc.american_fraction, ''), - COALESCE(prt.eccn, ''), + COALESCE(prt.eccn, fac.eccn_code, ''), COALESCE(fin.exchange_rate, 0), COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), ''), COALESCE(ih.capture_user, ''), @@ -549,14 +586,17 @@ class RepairImportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id - LEFT JOIN a76.items itm ON itm.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE ih.operation_type = 'imp' AND COALESCE(cmp.is_regime_change, false) = false @@ -583,8 +623,7 @@ class RepairImportQueries: FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo {discharge_filter} """ @@ -628,9 +667,8 @@ class ExportQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, COALESCE(ped.pedimento_code, '') AS C7, COALESCE(ped.regime, '') AS C8, - COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C9, - COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C10, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, COALESCE(log.payment_receipt_num, '') AS C12, COALESCE(cmp.provider_id::text, '') AS C14, COALESCE(cmp.sold_to_id::text, '') AS C15, @@ -652,7 +690,9 @@ class ExportQueries: ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, '' - ) AS C54 + ) AS C54, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -665,6 +705,16 @@ class ExportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id WHERE {where_clause} ORDER BY ih.invoice_number """ @@ -677,34 +727,32 @@ class ExportQueries: ped.pedimento_number AS C2, -- [1] ih.invoice_date AS C3, -- [2] '' AS C4, -- [3] - '' AS C5, -- [4] - ped.status AS C6, -- [5] - ped.pedimento_code AS C7, -- [6] - ped.regime AS C8, -- [7] - log.entry_exit_date AS C9, -- [8] - log.delivery_date AS C10, -- [9] - log.payment_date AS C11, -- [10] + ped.pedimento_code AS C5, -- [4] + ped.regime AS C6, -- [5] + pd.entry_date AS C7, -- [6] + COALESCE(pd.end_date, pd.payment_date) AS C8, -- [7] + pd.payment_date AS C9, -- [8] log.payment_receipt_num AS C12, -- [11] '' AS C13, -- [12] cmp.provider_id AS C14, -- [13] cmp.sold_to_id AS C15, -- [14] cmp.customs_broker_id AS C16, -- [15] '' AS C17, -- [16] - prt.part_number AS C18, -- [17] - ld.description_spanish AS C19, -- [18] - ld.description_english AS C20, -- [19] + COALESCE(prt.part_number::text, '') AS C18, -- [17] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, -- [18] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, -- [19] lq.quantity AS C21, -- [20] um.code AS C22, -- [21] '' AS C23, -- [22] '' AS C24, -- [23] - lq.net_weight AS C25, -- [24] - lq.gross_weight AS C26, -- [25] - ih.purchase_order AS C27, -- [26] - lc.fraction AS C28, -- [27] - '' AS C29, -- [28] - '' AS C30, -- [29] - '' AS C31, -- [30] - '' AS C32, -- [31] + COALESCE(lq.net_weight, 0) AS C25, -- [24] + COALESCE(lq.gross_weight, 0) AS C26, -- [25] + COALESCE(il.order, ih.purchase_order, '') AS C27, -- [26] + COALESCE(lc.fraction, '') AS C28, -- [27] + COALESCE(lc.fraction_type, '') AS C29, -- [28] + COALESCE(lc.advalorem_numeric, 0) AS C30, -- [29] + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C31, -- [30] + COALESCE(lc.origin_country, '') AS C32, -- [31] cmp.aduana AS C33, -- [32] ih.invoice_type AS C34, -- [33] ih.id AS C35, -- [34] @@ -719,10 +767,10 @@ class ExportQueries: cmp.edocument AS C40, -- [39] cmp.vucem_operation_num AS C41, -- [40] il.line_number AS C42, -- [41] - ld.brand AS C43, -- [42] - ld.model AS C44, -- [43] - prt.us_fraction AS C45, -- [44] - prt.eccn AS C46, -- [45] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, -- [42] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, -- [43] + COALESCE(cls.us_fraction, '') AS C45, -- [44] + COALESCE(prt.eccn, fac.eccn_code, '') AS C46, -- [45] prt.id AS C47, -- [46] fin.exchange_rate AS C48, -- [47] ih.emission_date AS C49, -- [48] @@ -749,14 +797,16 @@ class ExportQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id - LEFT JOIN a76.items itm ON itm.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id LEFT JOIN a76.classes cls ON cls.id = il.class_id - LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE {where_clause} ORDER BY ih.invoice_number, il.line_number @@ -782,8 +832,7 @@ class ExportQueries: FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo {discharge_filter} """ @@ -828,7 +877,7 @@ class ExportRepairQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, COALESCE(ped.pedimento_code, '') AS C7, COALESCE(ped.regime, '') AS C8, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, COALESCE(cmp.remesa::text, '') AS C12, COALESCE(fin.exchange_rate, 0) AS C13, COALESCE(cmp.provider_id::text, '') AS C14, @@ -852,7 +901,9 @@ class ExportRepairQueries: ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, '' - ) AS C54 + ) AS C54, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn FROM a76.invoice_header ih LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id @@ -865,6 +916,17 @@ class ExportRepairQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE 1=1 {discharge_filter} + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id WHERE ih.operation_type = 'exp' AND ih.invoice_type = 'REPAR' {"AND " + where_str if where_str else ""} @@ -884,9 +946,9 @@ class ExportRepairQueries: CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, COALESCE(ped.pedimento_code, '') AS C7, COALESCE(ped.regime, '') AS C8, - '' AS C9, - '' AS C10, - COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, COALESCE(cmp.remesa::text, '') AS C12, COALESCE(fin.exchange_rate, 0) AS C13, COALESCE(cmp.provider_id::text, '') AS C14, @@ -902,18 +964,18 @@ class ExportRepairQueries: COALESCE(lf.customs_value_usd, 0) AS C24, COALESCE(lq.net_weight, 0) AS C25, COALESCE(lq.gross_weight, 0) AS C26, - COALESCE(ih.purchase_order, '') AS C27, + COALESCE(il.order, ih.purchase_order, '') AS C27, COALESCE(lc.fraction, '') AS C28, COALESCE(lc.fraction_type, '') AS C29, COALESCE(lc.advalorem_numeric, 0) AS C30, - COALESCE(lc.sector, '') AS C31, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C31, COALESCE(lc.origin_country, '') AS C32, COALESCE(ped.customs_office, '') AS C33, COALESCE(ih.document_type, '') AS C34, ih.id AS C35, COALESCE(lf.value_mxn, 0) AS C36, COALESCE(lf.value_usd, 0) AS C37, - 'P' AS C38, + COALESCE(il.material_type, 'P') AS C38, COALESCE( ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, @@ -925,8 +987,8 @@ class ExportRepairQueries: REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, COALESCE(cls.us_fraction, '') AS C45, - COALESCE(prt.eccn, '') AS C46, - COALESCE(il.part_number::text, '') AS C47, + COALESCE(prt.eccn, fac.eccn_code, '') AS C46, + COALESCE(prt.part_number::text, '') AS C47, COALESCE(fin.exchange_rate, 0) AS C48, COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, COALESCE(ih.capture_user, '') AS C50, @@ -951,14 +1013,16 @@ class ExportRepairQueries: pro_rect.original_license = ped.license AND pro_rect.original_pedimento_number = ped.pedimento_number LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id - LEFT JOIN a76.items itm ON itm.invoice_id = ih.id - LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id LEFT JOIN a76.classes cls ON cls.id = il.class_id - LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') AND UPPER(ih.invoice_type) IN ('DEF', 'REPAR', 'EXDEF', 'MATDE') @@ -983,7 +1047,7 @@ class ExportRepairQueries: FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id LEFT JOIN a24.fa_item_lines fil ON il.id = lf.item_line_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo {discharge_filter} """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py index df28b3c6..bf89f124 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -93,6 +93,11 @@ class RepairImportService: # Totals come directly from GROUP BY query (no N+1 problem) total_me = to_float(row[24]) # total_me from SUM aggregation total_mn = to_float(row[25]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[27]) + sum_value_mxn = to_float(row[28]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -228,8 +233,8 @@ class RepairImportService: db=db, db_name=filters.database_name, es_subpartida=row[30], # 'P' or 'S' - valor_me=row[20], - valor_mn_direct=row[19], + valor_me=row[21], + valor_mn_direct=row[20], fecha_pago=row[8], fecha_inicio=row[7], clave_ped=row[45], @@ -240,9 +245,9 @@ class RepairImportService: ) # Set peso values based on subpartida flag - if row[30] == 'P': - peso_neto = float(row[21]) if row[21] else 0.0 - peso_bruto = float(row[22]) if row[22] else 0.0 + if row[31] == 'P': + peso_neto = float(row[22]) if row[22] else 0.0 + peso_bruto = float(row[23]) if row[23] else 0.0 else: peso_neto = 0.0 peso_bruto = 0.0 @@ -252,9 +257,9 @@ class RepairImportService: ) simbolo_ex = None - if row[14]: + if row[15]: simbolo_ex = DatabaseHelper.get_part_export_symbol( - db, filters.database_name, row[14], filters.is_shelter + db, filters.database_name, row[15], filters.is_shelter ) pedimento_r1 = DatabaseHelper.get_rectification_pedimento( @@ -275,10 +280,10 @@ class RepairImportService: TipoMovTemDef='IMPRE', EsCambioRegimen='N', Regimen=row[6], - Fecha_Inicio=row[7], - Fecha_Fin=row[7], # Using same valid column or empty - Fecha_Pago=row[8], - Remesa=row[9], + Fecha_Inicio=parse_yyyymmdd_date(row[7]), + Fecha_Fin=parse_yyyymmdd_date(row[8]), + Fecha_Pago=parse_yyyymmdd_date(row[9]), + Remesa=row[10], Proveedor=proveedor_info.get('name'), RFCProveedor=proveedor_info.get('rfc'), ProveedorTaxID=proveedor_info.get('tax_id'), @@ -287,42 +292,42 @@ class RepairImportService: VendidoATaxID=vendido_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[14], - DescripcionE=StringHelper.clean_text(row[15]), - DescripcionI=StringHelper.clean_text(row[16]), - CantidadIE=float(row[17]) if row[17] else 0.0, - UniMed=row[18], + NumParte=row[15], + DescripcionE=StringHelper.clean_text(row[16]), + DescripcionI=StringHelper.clean_text(row[17]), + CantidadIE=float(row[18]) if row[18] else 0.0, + UniMed=row[19], ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, - OrdenCompraVenta=row[23], - FraccionArancelaria=row[24], - Preferencia=row[25], - Sector=row[26], - PaisOrigen=row[27], + OrdenCompraVenta=row[24], + FraccionArancelaria=row[25], + Preferencia=row[26], + Sector=row[27], + PaisOrigen=row[28], Aduana=aduana_nombre, - Advalorem=row[30], + Advalorem='', TipoExpo='', PedimentoR1=pedimento_r1, - EDocument=row[32], - NumOperacionVU=row[33], + EDocument=row[33], + NumOperacionVU=row[34], Series=series_info, - Marca=StringHelper.clean_text(row[34]), - Modelo=StringHelper.clean_text(row[35]), - FraccionAmericana=row[36], - ECCN=row[37], + Marca=StringHelper.clean_text(row[35]), + Modelo=StringHelper.clean_text(row[36]), + FraccionAmericana=row[37], + ECCN=row[38], SimboloEx=simbolo_ex, - FechaEmision=row[39], + FechaEmision=parse_yyyymmdd_date(row[40]) if row[40] else None, # C41 - FechaEmision BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, - UsuarioCap=row[40], - UsuarioAcr=row[41], - Transportista=row[42], - NumCaja=row[43], - Pedimento18=row[44], - AduanaCru=row[28], - Lote='' # Not in query + UsuarioCap=row[41], + UsuarioAcr=row[42], + Transportista=row[43], + NumCaja=row[44], + Pedimento18=row[45], + AduanaCru=row[29], + Lote=row[54] if len(row) > 54 else '' # Not in query but mapped safely ) movements.append(movement) @@ -347,7 +352,7 @@ class RepairImportService: if filters.range_type.value == "FF": where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") else: - where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") # Note: Status filter applied at Python level after CASE WHEN in SELECT # because is_updated doesn't directly represent AC/NA status @@ -383,8 +388,7 @@ class RepairImportService: COALESCE(SUM(lf.value_mxn), 0) FROM a76.item_line_financials lf INNER JOIN a76.item_lines il ON il.id = lf.item_line_id - INNER JOIN a76.items itm ON itm.id = il.item_id - WHERE itm.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo AND il.is_subitem = false {discharge_clause} """) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index 29d57b0f..40ae067c 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -97,6 +97,12 @@ class TemporaryImportService: valor_comercial_mn = to_float(row[30]) # valor_comercial_mn from item_line_financials valor_mp_temp_mn = to_float(row[31]) # valor_mp_temp_mn from item_line_financials valor_agre_mn = to_float(row[32]) # valor_agre_mn from item_line_financials + valor_mp_temp_usd = to_float(row[33]) # valor_mp_temp_usd from item_line_financials + sum_value_usd = to_float(row[34]) # sum_value_usd from item_line_financials (line item sum avoids zero-value header bug) + + # Replace zero values with the computed sums + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = valor_comercial_mn if valor_comercial_mn > 0 else total_mn # Calculate exchange rate and value valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( @@ -127,6 +133,24 @@ class TemporaryImportService: num_gaf_uni = DatabaseHelper.get_driver_badge( db, filters.database_name, factura ) + + # Calculate exchange rate for MPTemp explicitly decoupled from Valor Comercial + valor_mp_temp_raw, _ = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=to_float(row[33]), # sum_value_temp_usd + valor_mn=to_float(row[31]), # sum_value_temp_mxn + tipo_cambio_db=to_float(row[19]), + fecha_pago=row[8], + fecha_inicio=row[6], + tipo_pedimento=row[4], + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + valor_mp_temp = float(valor_mp_temp_raw) # Build movement item movement = MovementItem( @@ -137,8 +161,8 @@ class TemporaryImportService: ClavePed=row[4], # C5 - ClavePed TipoMovTemDef='IMTEM', EsCambioRegimen='N', - ValorMPTemp=valor_mp_temp_mn, - ValorComercialMN=valor_comercial_mn, + ValorMPTemp=valor_mp_temp, + ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, ValorAgre=valor_agre_mn, TipoExpo='', @@ -212,6 +236,15 @@ class TemporaryImportService: db, filters.database_name, row[17] # C18 - AAduanal ) + # Get provider and client details including RFC and TaxID + provider_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) if row[15] else {} + + client_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) if row[16] else {} + # Get customs section name aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( db, filters.database_name, row[37] # C38 - Aduana_Cruce @@ -233,13 +266,24 @@ class TemporaryImportService: met_trans=met_trans ) - # ValorComercialMN should always be in MXN - # If currency_type is ME, valor_comercial is in USD, so multiply by tipo_cambio - if filters.currency_type.value == "ME" and tipo_cambio: - valor_comercial_mn = float(valor_comercial) * float(tipo_cambio) - else: - # If currency_type is MN, valor_comercial is already in MXN - valor_comercial_mn = float(valor_comercial) + valor_mp_temp_raw, _ = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=float(row[59]) if row[59] else 0.0, + valor_mn_direct=float(row[58]) if row[58] else 0.0, + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C11 - Fecha_Inicio + clave_ped=row[57], # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + valor_mp_temp_mn = float(valor_mp_temp_raw) + + # Assign the properly converted commercial value directly + valor_comercial_mn = float(valor_comercial) # Set peso values based on subpartida flag if row[39] == 'P': # C40 - EsSubPartida @@ -288,6 +332,8 @@ class TemporaryImportService: return 'P' if val else 'S' # Convert bool to P/S for Advalorem return str(val) + logger.error(f"DEBUG ROW: NumParte(17)='{row[17]}', Sector(30)='{row[30]}', Partida {row[43]}, Original Part ID(46)='{row[46]}'") + # Build detailed movement item movement = MovementItemDetailed( Linea=row[43], # C44 - LineaImpo @@ -299,31 +345,32 @@ class TemporaryImportService: TipoMovTemDef='IMTEM', EsCambioRegimen='N', Regimen=row[9], # C10 - Regimen - Fecha_Inicio=none_if_empty(row[10]), # C11 - Fecha_Inicio - Fecha_Fin=none_if_empty(row[11]), # C12 - Fecha_Fin - Fecha_Pago=none_if_empty(row[12]), # C13 - Fecha_Pago + Fecha_Inicio=parse_yyyymmdd_date(row[10]), # C11 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[11]), # C12 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[12]), # C13 - Fecha_Pago Remesa=to_str(row[13]), # C14 - Remesa Proveedor=row[7], # C8 - Provider name (from JOIN) - RFCProveedor=None, # RFC not in detailed query - ProveedorTaxID=None, # Tax ID not in detailed query + RFCProveedor=provider_info.get('rfc'), + ProveedorTaxID=provider_info.get('tax_id'), VendidoA=row[8], # C9 - Client name (from JOIN) - VendidoARFC=None, # RFC not in detailed query - VendidoATaxID=None, # Tax ID not in detailed query + VendidoARFC=client_info.get('rfc'), + VendidoATaxID=client_info.get('tax_id'), AgenteAduanal=agente_info.get('name'), Patente=agente_info.get('license'), - NumParte=row[19], # C20 - Clase (NumParte) + NumParte=row[48], # C49 - Part Number (from JOIN) DescripcionE=StringHelper.clean_text(row[20]), # C21 DescripcionI=StringHelper.clean_text(row[21]), # C22 CantidadIE=float(row[22]) if row[22] else 0.0, # C23 UniMed=row[23], # C24 ValorComercialMN=valor_comercial_mn, + ValorMPTemp=valor_mp_temp_mn, TipoCambio=tipo_cambio, PesoNeto=peso_neto, PesoBruto=peso_bruto, OrdenCompraVenta=row[30], # C31 - OrdenCompra FraccionArancelaria=row[31], # C32 - Fraccion Preferencia=row[32], # C33 - TipoFraccion - Sector=row[34], # C35 - Sector + Sector=row[34], # C35 - Sector (from COALESCE) PaisOrigen=row[36], # C37 - PaisOrigen Aduana=aduana_nombre, Advalorem=to_str(row[39]), # C40 - EsSubPartida (convert bool to str) @@ -337,13 +384,13 @@ class TemporaryImportService: FraccionAmericana=row[46], # C47 - FraccionAme ECCN=row[47], # C48 - ECCN SimboloEx=simbolo_ex, - FechaEmision=parse_yyyymmdd_date(row[50]), # C51 - FechaEmision (convert to datetime) + FechaEmision=parse_yyyymmdd_date(row[50]), # C51 - FechaEmision BaseDeDatos=filters.database_name, NumGafUni=num_gaf_uni, UsuarioCap=row[51], # C52 - UsuarioCap UsuarioAcr=row[52], # C53 - UsuarioAct - Transportista=row[53], # C54 - Transportista - NumCaja=row[54], # C55 - Transporte + NumTrasporte + Transportista=row[53], # C54 - Carrier ID + NumCaja=row[54], # C55 - Transport num Pedimento18=row[55], # C56 - Pedimento18 AduanaCru=row[37], # C38 - Aduana_Cruce Lote=row[56] # C57 - LOTE @@ -371,7 +418,7 @@ class TemporaryImportService: if filters.range_type.value == "FF": where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") else: - where_conditions.append(f"log.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND log.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") # Note: Status filter applied at Python level after CASE WHEN in SELECT # because is_updated doesn't directly represent AC/NA status @@ -401,8 +448,7 @@ class TemporaryImportService: COALESCE(SUM(lf.value_mxn), 0) FROM a76.item_line_financials lf JOIN a76.item_lines il ON il.id = lf.item_line_id - JOIN a76.items i ON i.id = il.item_id - WHERE i.invoice_id = :consecutivo + WHERE il.invoice_id = :consecutivo AND COALESCE(il.is_subpartida, false) = false """) diff --git a/frontend/src/lib/api/dashboard/a24/fa_classes.ts b/frontend/src/lib/api/dashboard/a24/fa_classes.ts index 91359f52..e65f4625 100644 --- a/frontend/src/lib/api/dashboard/a24/fa_classes.ts +++ b/frontend/src/lib/api/dashboard/a24/fa_classes.ts @@ -98,7 +98,7 @@ export const faClassesApi = { * Actualizar una clase de activo fijo existente */ update: (id: number, data: FAClassUpdate, company_id: number): Promise> => { - return api.put(`/v1/a24/fa/classes/${id}?company_id=${company_id}`, data); + return api.put(`/v1/a24/fa/classes/${id}/?company_id=${company_id}`, data); }, /** diff --git a/frontend/src/lib/api/dashboard/a76/classes.ts b/frontend/src/lib/api/dashboard/a76/classes.ts index 236c2cdb..de2a8ca5 100644 --- a/frontend/src/lib/api/dashboard/a76/classes.ts +++ b/frontend/src/lib/api/dashboard/a76/classes.ts @@ -17,6 +17,7 @@ export interface A76Class { sub_key: string; physical_review: number; iva_exempt_fraction: string; + eccn_code?: string | null; is_active?: boolean; // Agregado para el switch del formulario created_at: string; updated_at: string; @@ -35,6 +36,7 @@ export interface A76ClassCreate { sub_key?: string | null; physical_review?: number | null; iva_exempt_fraction?: string | null; + eccn_code?: string | null; is_active?: boolean; } diff --git a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte index e0977939..fb406f32 100644 --- a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte +++ b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte @@ -732,18 +732,14 @@
- -
- - -
+ +
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-configuration.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-configuration.svelte index 8bc0f930..af2950b8 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-configuration.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-configuration.svelte @@ -5,14 +5,14 @@ import { Button } from '$lib/components/ui/button'; import { Folder } from 'lucide-svelte'; import PartNumberDialog from './part-number-dialog.svelte'; - import type { Item, LineDescriptions } from '$lib/api/dashboard/a76/items'; + import type { Item, LineDescriptions } from '$lib/api/dashboard/a76/items'; - let { + let { lineItem = $bindable(), - descriptions = $bindable() - }: { + descriptions = $bindable() + }: { lineItem: Partial; - descriptions: LineDescriptions; + descriptions: LineDescriptions; } = $props(); let showPartDialog = $state(false); @@ -22,30 +22,30 @@ lineItem.fa_data = {}; } - // Helper to map boolean to string for RadioGroup - let isSubPartidaValue = $derived(lineItem.fa_data?.is_subitem ? 'subpartida' : 'partida'); - function setIsSubPartida(val: string) { - if (!lineItem.fa_data) lineItem.fa_data = {}; - lineItem.fa_data.is_subitem = val === 'subpartida'; - } + // Helper to map boolean to string for RadioGroup + let isSubPartidaValue = $derived(lineItem.fa_data?.is_subitem ? 'subpartida' : 'partida'); + function setIsSubPartida(val: string) { + if (!lineItem.fa_data) lineItem.fa_data = {}; + lineItem.fa_data.is_subitem = val === 'subpartida'; + } - let containsSubPartidasValue = $derived(lineItem.fa_data?.contains_subitems ? 'si' : 'no'); - function setContinueSubPartidas(val: string) { - if (!lineItem.fa_data) lineItem.fa_data = {}; - lineItem.fa_data.contains_subitems = val === 'si'; - } + let containsSubPartidasValue = $derived(lineItem.fa_data?.contains_subitems ? 'si' : 'no'); + function setContinueSubPartidas(val: string) { + if (!lineItem.fa_data) lineItem.fa_data = {}; + lineItem.fa_data.contains_subitems = val === 'si'; + } - // Helper for subitem_number binding - let subitemNumber = $derived.by(() => lineItem.fa_data?.subitem_number ?? 0); - function setSubitemNumber(val: number) { - if (!lineItem.fa_data) lineItem.fa_data = {}; - lineItem.fa_data.subitem_number = val; - } + // Helper for subitem_number binding + let subitemNumber = $derived.by(() => lineItem.fa_data?.subitem_number ?? 0); + function setSubitemNumber(val: number) { + if (!lineItem.fa_data) lineItem.fa_data = {}; + lineItem.fa_data.subitem_number = val; + } function handlePartSelect(part: any) { lineItem.part_number = part.id; // Store part number for display - (lineItem as any).part_number = part.part_number; + (lineItem as any).part_number_display = part.part_number; (lineItem as any).part_description_es = part.description_spanish; (lineItem as any).part_description_en = part.description_english; } @@ -53,15 +53,12 @@ -
+
-
- Is - +
+ Is +
@@ -73,12 +70,15 @@
{#if isSubPartidaValue === 'partida'} -
- Contains Sub-Items - + Contains Sub-Items + + class="flex gap-3" + >
@@ -90,31 +90,33 @@
{:else if isSubPartidaValue === 'subpartida'} -
- Main Item Number - + Main Item Number + setSubitemNumber(e.currentTarget.valueAsNumber || 0)} - class="h-7 text-xs" + class="h-7 text-xs" placeholder="Enter main item number" /> -
- {/if} +
+ {/if}
-
+
- (showPartDialog = true)} /> @@ -124,29 +126,33 @@ class="h-7 w-7 shrink-0" onclick={() => (showPartDialog = true)} > - +
{#if (lineItem as any).part_description_es} -

{(lineItem as any).part_description_es}

+

+ {(lineItem as any).part_description_es} +

{/if}
- -
-
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte index a4a10bb3..13b20bf5 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte @@ -2,14 +2,16 @@ import * as Sheet from '$lib/components/ui/sheet'; import * as Tabs from '$lib/components/ui/tabs'; import { Input } from '$lib/components/ui/input'; + import { Textarea } from '$lib/components/ui/textarea'; import { Label } from '$lib/components/ui/label'; import { Button } from '$lib/components/ui/button'; import { Badge } from '$lib/components/ui/badge'; - import { Loader2, FileText } from 'lucide-svelte'; + import { Loader2, FileText, Folder } from 'lucide-svelte'; import type { Invoice } from '$lib/api/dashboard/a76/invoices'; import type { Item } from '$lib/api/dashboard/a76/items'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; import { obtenerAtajosPestanasItemInv } from '$lib/config/shortcuts/dashboard/invoices/item/inventory'; + import PartNumberDialog from '../fa/part-number-dialog.svelte'; let { open = $bindable(), @@ -34,6 +36,7 @@ } = $props(); let activeTab = $state('general'); + let showPartDialog = $state(false); const tabMapping: Record = { tab1: 'general', @@ -42,6 +45,19 @@ tab4: 'otros' }; + function handlePartSelect(part: any) { + editingItem.part_number = part.id; + // Store part number for display + (editingItem as any).part_number_display = part.part_number; + if (editingItem.description) { + editingItem.description.description_spanish = part.description_spanish; + editingItem.description.description_english = part.description_english; + } + if (editingItem.customs) { + editingItem.customs.fraction = part.fraction; + } + } + useShortcuts( 'Invoice Item Form (Inventory)', obtenerAtajosPestanasItemInv({ @@ -60,18 +76,16 @@ // Initialize missing nested objects if they don't exist $effect(() => { if (open && editingItem) { - if (editingItem && !editingItem.quantity) - editingItem.quantity = {} as any; - if (editingItem && !editingItem.financial) - editingItem.financial = {} as any; - if (editingItem && !editingItem.customs) - editingItem.customs = {} as any; - if (editingItem && !editingItem.description) - editingItem.description = {} as any; + if (editingItem && !editingItem.quantity) editingItem.quantity = {} as any; + if (editingItem && !editingItem.financial) editingItem.financial = {} as any; + if (editingItem && !editingItem.customs) editingItem.customs = {} as any; + if (editingItem && !editingItem.description) editingItem.description = {} as any; } }); + +
{#if line} - +
+ (showPartDialog = true)} + /> + +
{/if}
@@ -227,20 +249,20 @@
{#if line?.description} - {/if}
{#if line?.description} - {/if}
@@ -363,7 +385,7 @@ {/if}
@@ -377,7 +399,7 @@ id="imported_quantity" type="number" placeholder="0" - bind:value={(line.quantity as any).quantity_imported} + bind:value={(line.quantity as any).quantity_imported} /> {/if}
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte index a8e24e06..372198ff 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte @@ -87,6 +87,7 @@ item?.description?.description_english || '', unit_of_measure_code: item?.quantity?.unit_of_measure || item?.unit_of_measure, + part_number_display: (item as any).part_number_display || item?.part_number, fa_data: item?.fa_data || {}, warehouse: item?.warehouse, full_item: item @@ -261,11 +262,11 @@ payment_method: undefined, igi_amount: undefined, is_military_mcia: false, - wildcard_field: undefined, + wildcard_field: undefined, reference_number: '', order: invoice?.purchase_order || '', warehouse: '', - location: '', + location: '', // Nested relations financial: { unit_cost_usd: undefined, @@ -314,7 +315,7 @@ }, reference: { serie_id: undefined - } + } }; } @@ -422,8 +423,7 @@ quantity: Number(draft.quantity) || 0 }, financial: { - unit_cost_usd: - draft.unit_cost_usd !== null ? Number(draft.unit_cost_usd) || 0 : undefined + unit_cost_usd: draft.unit_cost_usd !== null ? Number(draft.unit_cost_usd) || 0 : undefined } }); } @@ -574,15 +574,15 @@ } // Load part number data - if (item.part_number) { + if (item.part_number_id) { try { const response = await fetch( - `/api-sveltekit/parts/${item.part_number}?company_id=${activeCompanyId}`, + `/api-sveltekit/parts/${item.part_number_id}?company_id=${activeCompanyId}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); if (response.ok) { const partData = await response.json(); - (item as any).part_number = partData.part_number; + (item as any).part_number_display = partData.part_number; (item as any).part_description_es = partData.description_spanish; (item as any).part_description_en = partData.description_english; } @@ -661,7 +661,8 @@ if (Array.isArray(packages)) { const pkg = packages.find((p: any) => p.id === packageId); if (pkg) { - (item.quantity as any).package_description = pkg.description_es || pkg.description_en || pkg.key; + (item.quantity as any).package_description = + pkg.description_es || pkg.description_en || pkg.key; (item.quantity as any).package_key = pkg.key; (item.quantity as any).package_weight_unit = pkg.weight_unit || 0; } @@ -990,15 +991,15 @@
-
-
+
+

Items de la Factura

Carga partidas, crea o aplica plantillas sin salir de esta vista.

-
+
@@ -1037,7 +1038,7 @@ Preferencia Contiene Subpartida Partida Principal - Acciones + Acciones @@ -1066,7 +1067,7 @@ {item.is_subitem ? 'S' : 'P'} {item.quantity?.quantity || '0'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'} {item.is_subitem ? 'S' : 'P'} {item.quantity?.quantity || '0'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'} {item.fa_data?.search_line || '-'} {item.is_subitem ? 'S' : 'P'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'}
@@ -1249,10 +1250,10 @@ }} > -
+
Usar plantilla @@ -1267,7 +1268,7 @@ disabled={isLoadingPresets} class="h-8 text-muted-foreground" > - + Actualizar
-
+
-
+
@@ -1303,47 +1304,47 @@
{#if isLoadingPresets}
- + Cargando...
{:else if filteredPresets.length === 0}
- +

No se encontraron plantillas

{:else} {#each filteredPresets as preset} @@ -1496,7 +1495,11 @@
- +
@@ -1510,18 +1513,18 @@
-
+
{builderItems.length} items/líneas
-
-
- +
+ Items de la plantilla
@@ -1531,7 +1534,7 @@ # Descripción Cant. - Acciones + Acciones @@ -1539,7 +1542,7 @@ Usa el botón "Agregar Item/Línea" para definir el contenido de la plantilla. @@ -1552,7 +1555,7 @@
- + {item?.[0]?.description?.description_spanish || 'Sin descripción'} {item?.[0]?.quantity?.quantity || 0} - +
@@ -1597,14 +1600,14 @@ diff --git a/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts b/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts index 3df967a2..141a1fbd 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts +++ b/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts @@ -114,7 +114,7 @@ function buildInvoicePayload(formData: FormDataSet): CreateInvoiceData | UpdateI invoice_type: InvoiceTopFieldsFormData?.invoice_type || undefined, document_type: generalFormData?.document_type || undefined, invoice_number: InvoiceTopFieldsFormData?.invoice_number || undefined, - purchase_order: InvoiceTopFieldsFormData?.purchase_order || undefined, + purchase_order: InvoiceTopFieldsFormData?.purchase_order || continuationFormData?.purchase_order || undefined, invoice_date: InvoiceTopFieldsFormData?.invoice_date || undefined, emission_date: InvoiceTopFieldsFormData?.emission_date || undefined, proforma_number: observationFormData?.proforma_number || undefined, diff --git a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte index ebde6753..5a0af337 100644 --- a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte +++ b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte @@ -16,7 +16,11 @@ fa_class_id?: number; depreciation_rate?: number | null; fda_code?: string | null; + eccn_code?: string | null; class_enabled?: boolean | null; + // Virtual fields for form compatibility + annual_depreciation_rate?: number | string | null; + fda_key?: string | null; } // Estado de la lista de clases @@ -42,6 +46,9 @@ fraction: '', us_fraction: '', unit_measure_trade: '', + depreciation_rate: null as number | null, + fda_code: '', + eccn_code: '', bom: '' }); @@ -117,227 +124,13 @@ fraction: cls.fraction || '', us_fraction: cls.us_fraction || '', unit_measure_trade: '', + depreciation_rate: (cls as FixedAssetClassExtended).depreciation_rate || null, + fda_code: (cls as FixedAssetClassExtended).fda_code || '', + eccn_code: (cls as FixedAssetClassExtended).eccn_code || '', bom: '' }; } - async function saveFixedAssetClass(formData: any) { - const companyId = companyStore.activeCompany?.id; - - // CAMBIO: Usar $state.snapshot para obtener una copia real, no reactiva - const data = $state.snapshot(formData); - - if (!companyId) { - toast.error('No hay empresa seleccionada'); - throw new Error('No hay empresa seleccionada'); - } - - // Validar campos obligatorios - const missingFields: string[] = []; - - if (!data.class_code?.trim()) { - missingFields.push('Código de clase'); - } - if (!data.description_es?.trim()) { - missingFields.push('Descripción en español'); - } - if (!data.material_key?.trim()) { - missingFields.push('Tipo de activo fijo'); - } - if (!data.unit_of_measure?.trim()) { - missingFields.push('Unidad de medida comercial'); - } - if (!data.fraction?.trim()) { - missingFields.push('Fracción arancelaria'); - } - - if (missingFields.length > 0) { - const fieldsList = missingFields.join(', '); - validationError = `Debe completar los siguientes campos obligatorios: ${fieldsList}`; - toast.error(validationError, { - duration: 8000 - }); - throw new Error(`Campos obligatorios faltantes: ${fieldsList}`); - } - - // Limpiar error de validación si todo está bien - validationError = ''; - - try { - // Usar el endpoint combinado /fa que crea ambos registros en una transacción - const payload = { - class_code: data.class_code.trim(), - description_es: data.description_es.trim(), - description_en: data.description_en?.trim() || '', - material_key: data.material_key.trim(), - unit_of_measure: data.unit_of_measure.trim(), - fraction: data.fraction.trim(), - us_fraction: data.us_fraction?.trim() || '', - sub_key: data.sub_key || '', - physical_review: data.physical_review ? 1 : 0, - iva_exempt_fraction: data.iva_exempt_fraction || '', - // FA-specific fields - import_tariff_code: data.import_tariff_code || null, - import_tariff_type: data.import_tariff_type || null, - export_tariff_code: data.export_tariff_code || null, - export_tariff_type: data.export_tariff_type || null, - depreciation_rate: data.annual_depreciation_rate || null, - fda_code: data.fda_key || null, - eccn_code: data.eccn_code || null, - class_enabled: true - }; - - const response = await classesApi.createFA(payload, companyId); - - if (response.error) { - console.error('Server error:', response.error); - - // Manejar diferentes formatos de error - let errorMessage = response.error; - let isDuplicateError = false; - - // Detectar si es un error de código duplicado - if (errorMessage.includes('código') && errorMessage.includes('ya está en uso')) { - isDuplicateError = true; - } - - // Mensaje más específico para errores de duplicado - if (isDuplicateError) { - validationError = `⚠️ ${errorMessage}\n\nPor favor, cambie el código de clase a uno diferente.`; - } else { - validationError = `⚠️ ${errorMessage}`; - } - - toast.error(errorMessage, { duration: 8000 }); - throw new Error(errorMessage); - } - - validationError = ''; - toast.success('✅ Clase de activo fijo creada correctamente'); - return response.data; - } catch (error: any) { - console.error('Error saving fixed asset class:', error); - // El toast ya se mostró arriba, solo re-lanzar el error - throw error; - } - } - - async function updateFixedAssetClass(formData: any) { - const companyId = companyStore.activeCompany?.id; - - // CAMBIO 1: Usar $state.snapshot para obtener una copia real, no reactiva - // Esto garantiza que aunque el hijo borre el formulario, 'data' mantenga los valores - const data = $state.snapshot(formData); - - if (!companyId || !selectedClass) { - toast.error('No hay empresa o clase seleccionada'); - return; - } - - // CAMBIO 2: Validar sobre 'data' (la copia muerta) - const missingFields: string[] = []; - if (!data.class_code?.trim()) missingFields.push('Código de clase'); - if (!data.description_es?.trim()) missingFields.push('Descripción en español'); - if (!data.material_key?.trim()) missingFields.push('Tipo de activo fijo'); - if (!data.unit_of_measure?.trim()) missingFields.push('Unidad de medida comercial'); - if (!data.fraction?.trim()) missingFields.push('Fracción arancelaria'); - - if (missingFields.length > 0) { - const errorMsg = `Campos obligatorios faltantes: ${missingFields.join(', ')}`; - validationError = `⚠️ ${errorMsg}`; - toast.error(errorMsg); - // Lanzamos el error para que el 'onSave' del Dialog no cierre la ventana - throw new Error(errorMsg); - } - - validationError = ''; - - try { - // CAMBIO 3: Usar siempre 'data' para los payloads - const a76Response = await classesApi.update( - selectedClass.id, - { - class_code: data.class_code.trim(), - description_es: data.description_es.trim(), - description_en: data.description_en?.trim() || '', - material_key: data.material_key.trim(), - unit_of_measure: data.unit_of_measure.trim(), - fraction: data.fraction.trim(), - us_fraction: data.us_fraction || '', - physical_review: data.physical_review ? 1 : 0, - iva_exempt_fraction: data.iva_exempt_fraction || '' - }, - companyId - ); - - if (selectedClass.fa_class_id) { - await faClassesApi.update( - selectedClass.fa_class_id, - { - depreciation_rate: data.annual_depreciation_rate || null, - fda_code: data.fda_key || null - }, - companyId - ); - } else { - await faClassesApi.create( - { - class_id: selectedClass.id, - depreciation_rate: data.annual_depreciation_rate || null, - fda_code: data.fda_key || null, - class_enabled: true - }, - companyId - ); - } - - toast.success('Clase actualizada correctamente'); - return { a76: a76Response.data }; - } catch (error: any) { - console.error('Error updating fixed asset class:', error); - console.error('Error response:', error?.response); - console.error('Error response data:', error?.response?.data); - console.error('Error response detail:', error?.response?.data?.detail); - console.error('Error type:', typeof error?.response?.data?.detail); - - let errorMessage = 'Error al actualizar la clase'; - let isDuplicateError = false; - - // Extract error message from response - if (error?.response?.data?.detail) { - if (Array.isArray(error.response.data.detail)) { - errorMessage = error.response.data.detail - .map((e: any) => `${e.loc ? e.loc.join(' → ') : ''}: ${e.msg || e}`) - .join(', '); - } else if (typeof error.response.data.detail === 'string') { - errorMessage = error.response.data.detail; - // Detectar si es un error de código duplicado - if (errorMessage.includes('código') && errorMessage.includes('ya está en uso')) { - isDuplicateError = true; - } - } else { - errorMessage = JSON.stringify(error.response.data.detail); - } - } else if (error?.message) { - errorMessage = error.message; - } - - console.error('Final error message:', errorMessage); - console.error('Is duplicate error:', isDuplicateError); - - // Mensaje más específico para errores de duplicado - if (isDuplicateError) { - validationError = `⚠️ ${errorMessage}\n\nPor favor, cambie el código de clase a uno diferente.`; - } else { - validationError = `⚠️ ${errorMessage}`; - } - - toast.error(errorMessage, { duration: 8000 }); - - console.error('Toast shown, about to throw error'); - throw error; - } - } function handleNew() { selectedClass = null; formData = { @@ -349,6 +142,9 @@ fraction: '', us_fraction: '', unit_measure_trade: '', + depreciation_rate: null as number | null, + fda_code: '', + eccn_code: '', bom: '' }; } @@ -397,6 +193,9 @@ fraction: '', us_fraction: '', unit_measure_trade: '', + depreciation_rate: null as number | null, + fda_code: '', + eccn_code: '', bom: '' }; } catch (error) { @@ -629,6 +428,18 @@ {formData.fraction || '0000.00.00'}

+ + +
+ +

+ {formData.eccn_code || '---'} +

+
@@ -752,6 +563,48 @@ companyId ); + // También actualizar la extensión FA + if (selectedClass.fa_class_id) { + await faClassesApi.update( + selectedClass.fa_class_id, + { + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null + }, + companyId + ); + } else { + await faClassesApi.create( + { + class_id: selectedClass.id, + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null, + class_enabled: true + }, + companyId + ); + } + // ¡IMPORTANTE! fetchApi NO lanza excepciones, retorna { error, status } if (response.error) { console.error('❌ Error en respuesta de actualización:', response); @@ -770,8 +623,18 @@ sub_key: cleanData.sub_key || '', physical_review: cleanData.physical_review ? 1 : 0, iva_exempt_fraction: cleanData.iva_exempt_fraction || '', - depreciation_rate: cleanData.depreciation_rate || null, - fda_code: cleanData.fda_code || null, + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null, class_enabled: true }; diff --git a/frontend/src/routes/dashboard/reports/invoices/+page.svelte b/frontend/src/routes/dashboard/reports/invoices/+page.svelte index 07b043a8..2776ce68 100644 --- a/frontend/src/routes/dashboard/reports/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/reports/invoices/+page.svelte @@ -457,19 +457,22 @@ document.body.removeChild(link); window.URL.revokeObjectURL(url); - toast.success('Reporte generado y descargado. También se ha enviado por correo.', { - id: toastId - }); + toast.success( + `Reporte generado y descargado.${config.sendEmail ? ' También se ha enviado por correo.' : ''}`, + { + id: toastId + } + ); } catch (downloadErr) { console.error('Error downloading file:', downloadErr); toast.success( - 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', + `Reporte generado correctamente.${config.sendEmail ? ' Se ha enviado un correo con los resultados.' : ''}`, { id: toastId } ); } } else { toast.success( - 'Reporte generado correctamente. Se ha enviado un correo con los resultados.', + `Reporte generado correctamente.${config.sendEmail ? ' Se ha enviado un correo con los resultados.' : ''}`, { id: toastId } ); } From af9be8d0b5f0c5b363619de9e671cc2c38f719f6 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 24 Feb 2026 09:23:07 -0600 Subject: [PATCH 28/54] feat: Refine invoice report queries to handle empty concatenated transport data and adjust subpartida logic for peso calculation. --- .../movements/invoices/services/export.py | 74 +++++++++---------- .../invoices/services/export_repair.py | 6 +- .../invoices/services/query_builders.py | 16 ++-- .../movements/invoices/services/temporary.py | 4 +- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py index 17ceb6f9..de65c9db 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -64,13 +64,13 @@ class ExportService: for row in results: factura = row[0] # C1 - FacturaExpo - tipo_mov = row[15] # C34 - TipoFactura + tipo_mov = row[14] # C34 - TipoFactura # Skip cancelled if not included if not filters.include_cancelled and row[3] != 'AC': # C6 - Estatus continue - consecutivo = row[16] # C35 - Consecutivo + consecutivo = row[15] # C35 - Consecutivo # Totals come directly from GROUP BY query (no N+1 problem) def to_float(val): @@ -78,10 +78,10 @@ class ExportService: try: return float(val) except (ValueError, TypeError): return 0.0 - total_me = to_float(row[24]) # total_me from SUM aggregation - total_mn = to_float(row[25]) # total_mn from SUM aggregation - sum_value_usd = to_float(row[27]) - sum_value_mxn = to_float(row[28]) + total_me = to_float(row[23]) # total_me from SUM aggregation + total_mn = to_float(row[24]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[26]) + sum_value_mxn = to_float(row[27]) total_me = sum_value_usd if sum_value_usd > 0 else total_me total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn @@ -92,9 +92,9 @@ class ExportService: db_name=filters.database_name, valor_me=total_me, valor_mn=total_mn, - tipo_cambio_db=row[19], # C48 - TipoCambio - fecha_pago=row[8], # C11 - Fecha_Pago - fecha_inicio=row[6], # C9 - Fecha_Inicio + tipo_cambio_db=row[18], # C48 - TipoCambio + fecha_pago=row[7], # C11 - Fecha_Pago + fecha_inicio=row[6], # C10 - Fecha_Inicio (mapped previously to C9) tipo_pedimento='', # Not in aggregated query currency_type=filters.currency_type.value, exchange_rate_type=filters.exchange_rate_type.value, @@ -107,7 +107,7 @@ class ExportService: rectified_pedimento = DatabaseHelper.get_rectification_pedimento( db, row[1], # C2 - PedimentoExpo - row[26], # C54 - PedRectifica + row[25], # C54 - PedRectifica filters.is_shelter ) @@ -126,19 +126,19 @@ class ExportService: ValorMPTemp=valor_comercial, ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, - ValorAgre=0.0, + ValorAgre=to_float(row[28]), TipoExpo='EXPO DEF', PedimentoR1=rectified_pedimento, - EDocument=row[17], # C40 - EDocument - NumOperacionVU=row[18], # C41 - NumOperacionVU + EDocument=row[16], # C40 - EDocument + NumOperacionVU=row[17], # C41 - NumOperacionVU BaseDeDatos=filters.database_name, NumGafUni=driver_badge, - UsuarioCap=row[21], # C50 - UsuarioCap - UsuarioAcr=row[22], # C51 - UsuarioAct - Fecha_Pago=parse_yyyymmdd_date(row[8]), # C11 - Fecha_Pago - NumCaja=row[23], # C53 - Transporte + NumTrasporte + UsuarioCap=row[20], # C50 - UsuarioCap + UsuarioAcr=row[21], # C51 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[7]), # C11 - Fecha_Pago + NumCaja=row[22], # C53 - Transporte + NumTrasporte Pedimento18='', # Not in aggregated query - AduanaCru=row[14], # C33 - Aduana_Cruce + AduanaCru=row[13], # C33 - Aduana_Cruce Lote='' # Not in aggregated query ) @@ -231,9 +231,9 @@ class ExportService: met_trans=met_trans ) - # Set peso values based on subpartida flag - peso_neto_final = row[24] if row[37] == 'P' else 0 # C25 - PesoNeto - peso_bruto_final = row[25] if row[37] == 'P' else 0 # C26 - PesoBruto + # Set peso values (material_type is typically 'PT' or 'MP', not just 'P') + peso_neto_final = row[24] if row[37] != 'S' else 0 # C25 - PesoNeto + peso_bruto_final = row[25] if row[37] != 'S' else 0 # C26 - PesoBruto # Get series information series_info = DatabaseHelper.get_series_info_export( @@ -253,7 +253,7 @@ class ExportService: # Build detailed movement item movement = MovementItemDetailed( - Linea=row[39], # C42 - LineaExpo + Linea=row[41], # C42 - LineaExpo Factura=row[0], # C1 - FacturaExpo Pedimento=row[1], # C2 - PedimentoExpo FechaFactura=row[2], # C3 - FechaFactura @@ -289,26 +289,26 @@ class ExportService: Sector=row[30], # C31 - Sector PaisOrigen=row[31], # C32 - PaisOrigen Aduana=customs_name, - Advalorem=row[27], # C30 - Advalorem + Advalorem=row[29], # C30 - Advalorem TipoExpo='EXPO DEF', PedimentoR1=rectified_pedimento, - EDocument=row[37], # C40 - EDocument - NumOperacionVU=row[38], # C41 - NumOperacionVU + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU Series=series_info, - Marca=StringHelper.clean_text(row[40]), # C43 - Marca - Modelo=StringHelper.clean_text(row[41]), # C44 - Modelo - FraccionAmericana=row[42], # C45 - FraccionAme - ECCN=row[43], # C46 - ECCN - FechaEmision=parse_yyyymmdd_date(row[46]) if row[46] else None, # C49 - FechaEmision + Marca=StringHelper.clean_text(row[42]), # C43 - Marca + Modelo=StringHelper.clean_text(row[43]), # C44 - Modelo + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN + FechaEmision=parse_yyyymmdd_date(row[48]) if row[48] else None, # C49 - FechaEmision BaseDeDatos=filters.database_name, NumGafUni=driver_badge, - UsuarioCap=row[47], # C50 - UsuarioCap - UsuarioAcr=row[48], # C51 - UsuarioAct - Transportista=row[49], # C52 - Carrier ID (derived from log.transport_id) - NumCaja=row[50], # C53 - log.transport_id || log.transport_num - Pedimento18=row[51], # C54 - empty - AduanaCru=row[30], # C33 - Aduana_Cruce - Lote=row[52] if len(row) > 52 else '' # C55 - Lote + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Carrier ID (derived from log.transport_id) + NumCaja=row[52], # C53 - log.transport_id || log.transport_num + Pedimento18=row[53], # C54 - empty + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] if len(row) > 54 else '' # C55 - Lote ) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py index 98b33a0f..63704ddd 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -155,7 +155,7 @@ class ExportRepairService: ValorMPTemp=valor_comercial, ValorComercialMN=valor_comercial, TipoCambio=tipo_cambio, - ValorAgre=0.0, + ValorAgre=to_float(row[29]), TipoExpo='EXPO REP', PedimentoR1=pedimento_r1, EDocument=row[16], # C40 - EDocument ← FIXED (was 17) @@ -245,8 +245,8 @@ class ExportRepairService: db, filters.database_name, row[32] # C33 - Aduana_Cruce ) - # Calculate values (only for main partidas 'P') - if row[37] == 'P': # C38 - EsSubPartida + # Set peso values based on subpartida flag (allow 'PT', 'MP', etc. but block 'S') + if row[37] != 'S': # C38 - EsSubPartida valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_partida( db=db, db_name=filters.database_name, diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py index 6e14c659..7b2d7fdb 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -41,7 +41,7 @@ class TemporaryImportQueries: COALESCE(ih.capture_user, '') AS C52, COALESCE(ih.who_updated, '') AS C53, COALESCE(log.carrier_id, '') AS C54, - COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_num, log.license_plate), ''), '') AS C55, '' AS C56, '' AS C57, '' AS C58, @@ -147,7 +147,7 @@ class TemporaryImportQueries: COALESCE(ih.capture_user, '') AS C52, COALESCE(ih.who_updated, '') AS C53, COALESCE(log.carrier_id, '') AS C54, - COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_num, log.license_plate), ''), '') AS C55, '' AS C56, COALESCE(ld.lot, '') AS C57, '' AS C58, @@ -255,7 +255,7 @@ class DefinitiveImportQueries: COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C52, COALESCE(ih.capture_user, '') AS C53, COALESCE(ih.who_updated, '') AS C54, - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C56, '' AS C57, '' AS C58, '' AS C59, @@ -354,7 +354,7 @@ class DefinitiveImportQueries: COALESCE(ih.capture_user, '') AS C52, COALESCE(ih.who_updated, '') AS C53, COALESCE(log.carrier_id, '') AS C54, - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C55, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C55, '' AS C56, COALESCE(ld.lot, '') AS C57, '' AS C58, @@ -683,7 +683,7 @@ class ExportQueries: COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C49, COALESCE(ih.capture_user, '') AS C50, COALESCE(ih.who_updated, '') AS C51, - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, COALESCE(fin.value_me, 0) AS total_me, COALESCE(fin.value_mn, 0) AS total_mn, COALESCE( @@ -777,7 +777,7 @@ class ExportQueries: ih.capture_user AS C50, -- [49] ih.who_updated AS C51, -- [50] '' AS C52, -- [51] - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, -- [52] NumCaja + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, -- [52] NumCaja '' AS C54, -- [53] Pedimento18 COALESCE(ld.lot, '') AS C55, -- [54] Lote '' AS C56, -- [55] TipoPedimentoTransporte @@ -894,7 +894,7 @@ class ExportRepairQueries: COALESCE(ih.capture_user, '') AS C50, COALESCE(ih.who_updated, '') AS C51, COALESCE(log.carrier_id, '') AS C52, - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, COALESCE(fin.value_me, 0) AS total_me, COALESCE(fin.value_mn, 0) AS total_mn, COALESCE( @@ -994,7 +994,7 @@ class ExportRepairQueries: COALESCE(ih.capture_user, '') AS C50, COALESCE(ih.who_updated, '') AS C51, COALESCE(log.carrier_id, '') AS C52, - COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, '' AS C54, COALESCE(ld.lot, '') AS C55, '' AS C56, diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py index 40ae067c..1e3faa70 100644 --- a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -285,8 +285,8 @@ class TemporaryImportService: # Assign the properly converted commercial value directly valor_comercial_mn = float(valor_comercial) - # Set peso values based on subpartida flag - if row[39] == 'P': # C40 - EsSubPartida + # Set peso values based on subpartida flag (allow 'PT', 'MP', etc. but block 'S') + if row[39] != 'S': # C40 - EsSubPartida peso_neto = float(row[28]) if row[28] else 0.0 # C29 peso_bruto = float(row[29]) if row[29] else 0.0 # C30 else: From c9f934a0da8b5fdd2c12fe98070e4a33ce218b88 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Tue, 24 Feb 2026 11:35:46 -0600 Subject: [PATCH 29/54] Nuevo frontend y start cambiado --- .../api/v1/modules/core/help_center/models.py | 10 +- .../v1/modules/core/help_center/services.py | 155 +++++++++++++++--- .../api/v1/modules/core/help_center/tasks.py | 14 ++ .../api/v1/modules/core/help_center/utils.py | 73 +++++++++ docker-compose.yml | 31 ++-- .../routes/dashboard/help-center/+page.svelte | 10 +- .../help-center/editor/[uuid]/+page.svelte | 137 +++++++++------- frontend/vite.config.ts | 8 +- start.sh | 92 ++++++----- 9 files changed, 383 insertions(+), 147 deletions(-) create mode 100644 backend/api/v1/modules/core/help_center/utils.py diff --git a/backend/api/v1/modules/core/help_center/models.py b/backend/api/v1/modules/core/help_center/models.py index c1d84662..e7df432c 100644 --- a/backend/api/v1/modules/core/help_center/models.py +++ b/backend/api/v1/modules/core/help_center/models.py @@ -22,11 +22,11 @@ class HelpArticle(Base): category = Column(String(255), nullable=True, default="General") order = Column(Integer, nullable=True, default=0) - # Multimedia Fields - content_type = Column(String(50), nullable=False, default="article") # article, pdf, video, image, document - file_url = Column(String(512), nullable=True) # URL to the uploaded asset - file_size = Column(Integer, nullable=True) # Size in bytes - mime_type = Column(String(100), nullable=True) # e.g. application/pdf + # Removed missing fields to avoid 500 errors (No migration approach) + # content_type = Column(String(50), nullable=False, default="article") + # file_url = Column(String(512), nullable=True) + # file_size = Column(Integer, nullable=True) + # mime_type = Column(String(100), nullable=True) def __repr__(self): return f"" diff --git a/backend/api/v1/modules/core/help_center/services.py b/backend/api/v1/modules/core/help_center/services.py index 78274d9c..31f91e93 100644 --- a/backend/api/v1/modules/core/help_center/services.py +++ b/backend/api/v1/modules/core/help_center/services.py @@ -1,3 +1,5 @@ +import json +import re from datetime import datetime, timezone from typing import List, Optional from uuid import UUID @@ -6,32 +8,90 @@ from .models import HelpArticle from .schemas import HelpArticleCreate, HelpArticleUpdate, HelpSyncRequest, HelpSyncResponse class HelpCenterService: + @staticmethod + def _inject_metadata(article: HelpArticle) -> HelpArticle: + if not article or not article.content: + return article + + # Look for + match = re.search(r'', article.content, re.DOTALL) + if match: + try: + metadata = json.loads(match.group(1)) + article.content_type = metadata.get("content_type", "article") + article.file_url = metadata.get("file_url") + article.file_size = metadata.get("file_size") + article.mime_type = metadata.get("mime_type") + # Remove metadata from content for clean display if needed, + # but usually better to leave it and let parser handle it or hide it here. + # For now, we just set the attributes. + except Exception: + pass + else: + article.content_type = "article" + article.file_url = None + article.file_size = None + article.mime_type = None + + return article + + @staticmethod + def _extract_metadata(content: str, data: dict) -> str: + # Remove existing metadata block if any + content = re.sub(r'\n\n', '', content, flags=re.DOTALL) + + metadata = { + "content_type": data.get("content_type", "article"), + "file_url": data.get("file_url"), + "file_size": data.get("file_size"), + "mime_type": data.get("mime_type") + } + + # Only append if there's something meaningful beyond "article" + if metadata["content_type"] != "article" or metadata["file_url"]: + content += f"\n\n" + + return content + @staticmethod def get_all(db: Session) -> List[HelpArticle]: - return db.query(HelpArticle).all() + articles = db.query(HelpArticle).all() + return [HelpCenterService._inject_metadata(a) for a in articles] @staticmethod def get_by_uuid(db: Session, article_uuid: UUID) -> Optional[HelpArticle]: - return db.query(HelpArticle).filter(HelpArticle.uuid == article_uuid).first() + article = db.query(HelpArticle).filter(HelpArticle.uuid == article_uuid).first() + return HelpCenterService._inject_metadata(article) @staticmethod def get_by_slug(db: Session, slug: str) -> Optional[HelpArticle]: - return db.query(HelpArticle).filter(HelpArticle.slug == slug).first() + article = db.query(HelpArticle).filter(HelpArticle.slug == slug).first() + return HelpCenterService._inject_metadata(article) @staticmethod def get_modifications(db: Session, since: datetime) -> List[HelpArticle]: # Ensure timezone awareness if since.tzinfo is None: since = since.replace(tzinfo=timezone.utc) - return db.query(HelpArticle).filter(HelpArticle.updated_at > since).all() + articles = db.query(HelpArticle).filter(HelpArticle.updated_at > since).all() + return [HelpCenterService._inject_metadata(a) for a in articles] @staticmethod def create(db: Session, article: HelpArticleCreate) -> HelpArticle: - db_article = HelpArticle(**article.model_dump()) + data = article.model_dump() + # Move metadata into content + data["content"] = HelpCenterService._extract_metadata(data["content"], data) + # Remove virtual fields from data to avoid SQLAlchemy errors + virtual_fields = ["content_type", "file_url", "file_size", "mime_type"] + for f in virtual_fields: + if f in data: + del data[f] + + db_article = HelpArticle(**data) db.add(db_article) db.commit() db.refresh(db_article) - return db_article + return HelpCenterService._inject_metadata(db_article) @staticmethod def update(db: Session, article_uuid: UUID, article_data: HelpArticleUpdate) -> Optional[HelpArticle]: @@ -39,13 +99,41 @@ class HelpCenterService: if not db_article: return None + # Inject metadata to existing article to get current virtual fields + db_article = HelpCenterService._inject_metadata(db_article) + update_data = article_data.model_dump(exclude_unset=True) + + # Handle metadata update + if "content" in update_data or any(f in update_data for f in ["content_type", "file_url", "file_size", "mime_type"]): + # Merge existing metadata with new updates + current_meta = { + "content_type": getattr(db_article, "content_type", "article"), + "file_url": getattr(db_article, "file_url", None), + "file_size": getattr(db_article, "file_size", None), + "mime_type": getattr(db_article, "mime_type", None) + } + # Update with new data if present + for f in ["content_type", "file_url", "file_size", "mime_type"]: + if f in update_data: + current_meta[f] = update_data[f] + + # Use current content or new content + content = update_data.get("content", db_article.content) + update_data["content"] = HelpCenterService._extract_metadata(content, current_meta) + + # Remove virtual fields from data + virtual_fields = ["content_type", "file_url", "file_size", "mime_type"] + for f in virtual_fields: + if f in update_data: + del update_data[f] + for key, value in update_data.items(): setattr(db_article, key, value) db.commit() db.refresh(db_article) - return db_article + return HelpCenterService._inject_metadata(db_article) @staticmethod def delete(db: Session, article_uuid: UUID) -> bool: @@ -74,22 +162,34 @@ class HelpCenterService: if not db_article: # Caso A: Artículo nuevo desde el cliente + # Store metadata in content + client_meta = { + "content_type": sync_data.client_content_type, + "file_url": sync_data.client_file_url, + "file_size": sync_data.client_file_size, + "mime_type": sync_data.client_mime_type + } + content_with_meta = HelpCenterService._extract_metadata(sync_data.client_content, client_meta) + new_article = HelpArticle( uuid=sync_data.article_uuid, slug=sync_data.client_slug, title=sync_data.client_title, - content=sync_data.client_content, + content=content_with_meta, updated_at=client_updated_at, last_editor=sync_data.last_editor, category=sync_data.client_category, - order=sync_data.client_order, - content_type=sync_data.client_content_type, - file_url=sync_data.client_file_url, - file_size=sync_data.client_file_size, - mime_type=sync_data.client_mime_type + order=sync_data.client_order ) db.add(new_article) db.commit() + + # Download assets if needed (Images in content and main file) + from .utils import download_file_from_hub, sync_assets_from_content + if sync_data.client_file_url: + download_file_from_hub(sync_data.client_file_url) + sync_assets_from_content(sync_data.client_content) + return HelpSyncResponse(status="OK", message="Article created on server.") server_updated_at = db_article.updated_at @@ -98,22 +198,33 @@ class HelpCenterService: # Caso A: Cliente es más nuevo if client_updated_at > server_updated_at: - db_article.content = sync_data.client_content + client_meta = { + "content_type": sync_data.client_content_type, + "file_url": sync_data.client_file_url, + "file_size": sync_data.client_file_size, + "mime_type": sync_data.client_mime_type + } + db_article.content = HelpCenterService._extract_metadata(sync_data.client_content, client_meta) db_article.title = sync_data.client_title db_article.slug = sync_data.client_slug db_article.updated_at = client_updated_at db_article.last_editor = sync_data.last_editor db_article.category = sync_data.client_category db_article.order = sync_data.client_order - db_article.content_type = sync_data.client_content_type - db_article.file_url = sync_data.client_file_url - db_article.file_size = sync_data.client_file_size - db_article.mime_type = sync_data.client_mime_type db.commit() + + # Download assets if needed (Images in content) + from .utils import download_file_from_hub, sync_assets_from_content + if sync_data.client_file_url: + download_file_from_hub(sync_data.client_file_url) + sync_assets_from_content(sync_data.client_content) + return HelpSyncResponse(status="OK", message="Server updated with client data.") # Caso B: Servidor es más nuevo elif server_updated_at > client_updated_at: + # Inject metadata for response + db_article = HelpCenterService._inject_metadata(db_article) return HelpSyncResponse( status="UPDATE_REQUIRED", server_updated_at=server_updated_at, @@ -122,10 +233,10 @@ class HelpCenterService: server_slug=db_article.slug, server_category=db_article.category, server_order=db_article.order, - server_content_type=db_article.content_type, - server_file_url=db_article.file_url, - server_file_size=db_article.file_size, - server_mime_type=db_article.mime_type, + server_content_type=getattr(db_article, "content_type", "article"), + server_file_url=getattr(db_article, "file_url", None), + server_file_size=getattr(db_article, "file_size", None), + server_mime_type=getattr(db_article, "mime_type", None), message="Client is outdated. Update required." ) diff --git a/backend/api/v1/modules/core/help_center/tasks.py b/backend/api/v1/modules/core/help_center/tasks.py index 437b9f47..d069f94c 100644 --- a/backend/api/v1/modules/core/help_center/tasks.py +++ b/backend/api/v1/modules/core/help_center/tasks.py @@ -144,6 +144,12 @@ def sync_single_article(article_uuid): article.updated_at = result.server_updated_at db.commit() logger.info(f"Article {article.uuid} updated from server.") + + # Download assets if needed + from .utils import download_file_from_hub, sync_assets_from_content + if result.server_file_url: + download_file_from_hub(result.server_file_url) + sync_assets_from_content(result.server_content) else: logger.info(f"Article {article.uuid} sync OK: {result.message}") else: @@ -234,6 +240,14 @@ def sync_from_hub_task(): local_article.order = art_data.get('order', 0) db.commit() + + # Download assets after bulk update (Polling) + from .utils import download_file_from_hub, sync_assets_from_content + for art_data in articles_data: + if art_data.get('file_url'): + download_file_from_hub(art_data['file_url']) + sync_assets_from_content(art_data.get('content', '')) + logger.info("Polling sync completed successfully.") else: diff --git a/backend/api/v1/modules/core/help_center/utils.py b/backend/api/v1/modules/core/help_center/utils.py new file mode 100644 index 00000000..c6140e14 --- /dev/null +++ b/backend/api/v1/modules/core/help_center/utils.py @@ -0,0 +1,73 @@ +import os +import re +import httpx +import logging +import uuid +from pathlib import Path +from core.config import settings + +logger = logging.getLogger(__name__) + +def download_file_from_hub(relative_path: str) -> bool: + """ + Downloads a file from the Hub to the local storage. + relative_path: e.g., 'uploads/help/pdfs/myfile.pdf' or '/api/uploads/help/image.png' + """ + if not settings.CENTRAL_SERVER_URL or settings.CENTRAL_SERVER_URL == '""': + return False + + # Clean the path + clean_path = relative_path.replace("/api/uploads/", "uploads/") + if clean_path.startswith("/"): + clean_path = clean_path[1:] + + # Check if it starts with uploads + if not clean_path.startswith("uploads/"): + # If it doesn't start with uploads, it might just be the filename or a subpath + # We assume it's relative to /app/ + pass + + local_path = Path(clean_path) + if local_path.exists(): + return True + + # Ensure directories exist + local_path.parent.mkdir(parents=True, exist_ok=True) + + # Resolve Hub Base URL + # CENTRAL_SERVER_URL is usually http://hub:8000/api/v1/core/help-center/sync/ + # We want http://hub:8000/api/ + base_url = settings.CENTRAL_SERVER_URL.split("/v1/")[0] + hub_file_url = f"{base_url}/uploads/{clean_path.replace('uploads/', '')}" + + logger.info(f"Downloading asset from Hub: {hub_file_url} -> {local_path}") + + try: + with httpx.Client() as client: + response = client.get(hub_file_url, timeout=30.0) + if response.status_code == 200: + with open(local_path, "wb") as f: + f.write(response.content) + logger.info(f"Successfully downloaded {clean_path}") + return True + else: + logger.warning(f"Failed to download {clean_path}: Status {response.status_code}") + return False + except Exception as e: + logger.error(f"Error downloading {clean_path}: {str(e)}") + return False + +def sync_assets_from_content(content: str): + """ + Parses markdown content for image URLs and downloads them if they are local references. + Example: ![alt text](/api/uploads/help/uuid.png) + """ + if not content: + return + + # Regex for markdown images: ![...](/api/uploads/...) + image_pattern = r'!\[.*?\]\((/api/uploads/.*?)\)' + matches = re.findall(image_pattern, content) + + for asset_url in matches: + download_file_from_hub(asset_url) diff --git a/docker-compose.yml b/docker-compose.yml index 1e756b46..15835a1d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,6 @@ services: POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_APP_PASSWORD:-postgres} POSTGRES_INITDB_ARGS: "--encoding=UTF8" - PGDATA: /var/lib/postgresql/data ports: - "5432:5432" volumes: @@ -38,7 +37,7 @@ services: # PostgreSQL - Base de datos Keycloak postgres-keycloak: - image: postgres:16-alpine + image: postgres:18-alpine container_name: anexo76-postgres-keycloak environment: POSTGRES_DB: keycloak @@ -81,10 +80,10 @@ services: KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-admin} KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin} KC_DB: postgres - KC_DB_URL_HOST: anexo76-postgres-keycloak + KC_DB_URL_HOST: postgres-keycloak KC_DB_URL_PORT: "5432" KC_DB_URL_DATABASE: keycloak - KC_DB_URL: jdbc:postgresql://anexo76-postgres-keycloak:5432/keycloak + KC_DB_URL: jdbc:postgresql://postgres-keycloak:5432/keycloak KC_DB_USERNAME: postgres KC_DB_PASSWORD: ${POSTGRES_KEYCLOAK_PASSWORD:-postgres} KC_DB_SCHEMA: public @@ -102,7 +101,7 @@ services: - start-dev - --http-relative-path=/kcauth - --db=postgres - - --db-url-host=anexo76-postgres-keycloak + - --db-url-host=postgres-keycloak - --db-url-port=5432 - --db-url-database=keycloak - --db-username=postgres @@ -128,17 +127,13 @@ services: "CMD-SHELL", "exec 3<>/dev/tcp/127.0.0.1/9000; echo -e 'GET /kcauth/health/ready HTTP/1.1\r + Host: localhost\r - \ host: 127.0.0.1\r + Connection: close\r + \r - \ Connection: close\r - - - \ \r - - - \ ' >&3; grep -q 'HTTP/1.1 200' <&3 || exit 1" + ' >&3; grep -q 'HTTP/1.1 200' <&3 || exit 1" ] interval: 10s timeout: 5s @@ -247,6 +242,7 @@ services: - KEYCLOAK_REALM=${KEYCLOAK_REALM:-master} - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID:-anexo76-backend} - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-zRU5NuvUFtBSOuh7Kdc372AItoWGLgz9} + - VITE_HUB_MODE=${VITE_HUB_MODE:-true} ports: - "5173:5173" depends_on: @@ -348,7 +344,16 @@ volumes: networks: backend-net: driver: bridge + ipam: + config: + - subnet: 172.20.0.0/16 auth-net: driver: bridge + ipam: + config: + - subnet: 172.21.0.0/16 frontend-net: driver: bridge + ipam: + config: + - subnet: 172.22.0.0/16 diff --git a/frontend/src/routes/dashboard/help-center/+page.svelte b/frontend/src/routes/dashboard/help-center/+page.svelte index efb8d4c9..38828eeb 100644 --- a/frontend/src/routes/dashboard/help-center/+page.svelte +++ b/frontend/src/routes/dashboard/help-center/+page.svelte @@ -172,7 +172,7 @@ >
{#if article.content_type === 'pdf'} @@ -205,7 +205,13 @@
{#if HUB_MODE} diff --git a/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte b/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte index 168ec6a4..103d8404 100644 --- a/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte +++ b/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte @@ -16,6 +16,7 @@ Italic, Link as LinkIcon, List, + Heading1, Heading2, FileText, Video as VideoIcon, @@ -26,24 +27,24 @@ import { marked } from 'marked'; import DOMPurify from 'dompurify'; - let article: HelpArticle | null = null; // $state equivalent in Svelte 5 logic handled manually or via store, using standard let for simplest adaptation - let loading = true; - let processing = false; + let article = $state(null); + let loading = $state(true); + let processing = $state(false); // Editor State - let title = ''; - let slug = ''; - let content = ''; - let category = 'General'; - let order = 0; - let last_editor = 'Admin'; - let content_type = 'article'; - let file_url = ''; - let file_size: number | null = null; - let mime_type = ''; + let title = $state(''); + let slug = $state(''); + let content = $state(''); + let category = $state('General'); + let order = $state(0); + let last_editor = $state('Admin'); + let content_type = $state('article'); + let file_url = $state(''); + let file_size = $state(undefined); + let mime_type = $state(''); // Preview State - let showPreview = true; + let showPreview = $state(true); const HUB_MODE = import.meta.env.VITE_HUB_MODE === 'true'; onMount(async () => { @@ -68,9 +69,10 @@ content = article.content || ''; category = article.category || 'General'; order = article.order || 0; + last_editor = article.last_editor || 'Admin'; content_type = article.content_type || 'article'; file_url = article.file_url || ''; - file_size = article.file_size || null; + file_size = article.file_size ?? undefined; mime_type = article.mime_type || ''; } } catch (e: any) { @@ -83,9 +85,17 @@ async function handleSave() { processing = true; try { - const data = { - title, slug, content, last_editor, category, order, - content_type, file_url, file_size, mime_type + const data = { + title, + slug, + content, + last_editor, + category, + order, + content_type, + file_url, + file_size, + mime_type }; // Auto-generate slug if missing @@ -138,36 +148,47 @@ } async function handleImageUpload(file: File) { + const tid = toast.loading('Subiendo imagen...'); + processing = true; try { - toast.loading('Subiendo imagen...'); const result = await helpApi.uploadImage(file); const imageMarkdown = `\n![${file.name}](${result.url})\n`; insertText(imageMarkdown); - toast.success('Imagen insertada'); + toast.success('Imagen insertada', { id: tid }); } catch (e: any) { - toast.error('Error al subir: ' + e.message); + toast.error('Error al subir: ' + e.message, { id: tid }); + } finally { + processing = false; } } async function handleAssetUpload(file: File) { + const tid = toast.loading(`Subiendo ${file.name}...`); + processing = true; try { - processing = true; - toast.loading(`Subiendo ${file.name}...`); const result = await helpApi.uploadAsset(file); file_url = result.url; file_size = result.size; mime_type = result.mime_type; - + + // Auto-set title if empty + if (!title) { + title = file.name.split('.').shift() || 'Sin Título'; + } + if (!slug) { + slug = title.toLowerCase().replace(/[^\w]+/g, '-'); + } + // Auto-infer content type if not set or article if (content_type === 'article') { if (mime_type === 'application/pdf') content_type = 'pdf'; else if (mime_type.startsWith('video/')) content_type = 'video'; else content_type = 'document'; } - - toast.success('Archivo subido correctamente'); + + toast.success('Archivo subido correctamente', { id: tid }); } catch (e: any) { - toast.error('Error al subir archivo: ' + e.message); + toast.error('Error al subir archivo: ' + e.message, { id: tid }); } finally { processing = false; } @@ -229,24 +250,12 @@
-
- - -
-
- - -
-
- - -
-
+
-
+
+ + +
+
+ + +
@@ -383,9 +400,7 @@

Configuración de Documento

{/if} -

- Sube el archivo que deseas asociar a este título. -

+

Sube el archivo que deseas asociar a este título.

{#if file_url} @@ -396,9 +411,9 @@

Archivo Cargado

-

{file_url}

-

- {mime_type} • {(file_size ? (file_size / 1024 / 1024).toFixed(2) : '??')} MB +

{file_url}

+

+ {mime_type} • {file_size ? (file_size / 1024 / 1024).toFixed(2) : '??'} MB

@@ -406,21 +421,25 @@ -
{:else} -
- - @@ -164,7 +208,7 @@
@@ -172,7 +216,7 @@ {:else if article.content_type === 'video'}
@@ -193,7 +237,11 @@ Este archivo no tiene vista previa directa.

- diff --git a/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte b/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte index 103d8404..2455fea8 100644 --- a/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte +++ b/frontend/src/routes/dashboard/help-center/editor/[uuid]/+page.svelte @@ -27,6 +27,19 @@ import { marked } from 'marked'; import DOMPurify from 'dompurify'; + // Helper to resolve an API path from the DB (e.g., /api/uploads/...) to a full URL pointing to the local backend. + function resolveAssetUrl(url: string | undefined): string { + if (!url) return ''; + if (url.startsWith('http://') || url.startsWith('https://')) return url; + + // Fallback to empty string if VITE_API_URL is missing + // @ts-ignore + const apiUrl = import.meta.env.VITE_API_URL || ''; + const base = apiUrl.replace(/\/$/, ''); + const cleanUrl = url.replace(/^\/api\//, '/'); + return `${base}${cleanUrl}`; + } + let article = $state(null); let loading = $state(true); let processing = $state(false); @@ -206,11 +219,26 @@ } function renderMarkdown(text: string) { - const html = marked.parse(text || '') as string; - if (browser) { - return DOMPurify.sanitize(html); + if (!text) return ''; + try { + const html = marked.parse(text) as string; + + // Rewrite image src and link hrefs to point to the local backend + let resolvedHtml = html.replace(/src="([^"]+)"/g, (match, src) => { + return `src="${resolveAssetUrl(src)}"`; + }); + resolvedHtml = resolvedHtml.replace(/href="(\/api\/uploads\/[^"]+)"/g, (match, href) => { + return `href="${resolveAssetUrl(href)}"`; + }); + + if (browser && typeof window !== 'undefined') { + return DOMPurify.sanitize(resolvedHtml); + } + return resolvedHtml; + } catch (e) { + console.error("Markdown parsing error in editor:", e); + return ''; } - return html; } @@ -359,8 +387,8 @@ bind:value={content} class="w-full flex-1 resize-none bg-background p-8 font-mono text-sm leading-relaxed outline-none" placeholder="# Empieza a escribir aquí..." - ondrop={handleDrop} - ondragover={(e) => e.preventDefault()} + ondrop={(e: DragEvent) => handleDrop(e)} + ondragover={(e: DragEvent) => e.preventDefault()} > @@ -418,7 +446,7 @@
-
+ + + + + + + + + + {#each filteredItems as item} + handleSelect(item)} + > + + + + + + {/each} + {#if filteredItems.length === 0} + + + + {/if} + +
Clave M3Clave MexClave AmeDescripción
{item.m3_key || ''}{item.mex_key || ''}{item.ame_key || ''}{item.description || ''}
+ No se encontraron resultados +
+
+ {/if} +
+ +
+ +
+ + diff --git a/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts b/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts index dc716087..8902cccb 100644 --- a/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts +++ b/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts @@ -4,6 +4,7 @@ export const obtenerAtajosEdicionAgente = (acciones: { irGeneral: () => void; irContacto: () => void; irDireccion: () => void; + irVU: () => void; guardar: () => void; cancelar: () => void; }): ShortcutDef[] => [ @@ -22,6 +23,11 @@ export const obtenerAtajosEdicionAgente = (acciones: { description: 'Tab Dirección', action: acciones.irDireccion }, + { + key: 'Alt+Digit4', + description: 'Tab Ventanilla Única', + action: acciones.irVU + }, { key: 'Ctrl+S', description: 'Guardar', diff --git a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte index 264e7d8a..801303a2 100644 --- a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte @@ -8,6 +8,8 @@ } from '$lib/api/dashboard/a76/customs-brokers'; // UI Components + import CountryDialog from '$lib/components/dashboard/invoices/edit/items/fa/country-dialog.svelte'; + import StateDialog from '$lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte'; import { Button } from '$lib/components/ui/button'; import { Input } from '$lib/components/ui/input'; import { Label } from '$lib/components/ui/label'; @@ -15,6 +17,7 @@ import { Badge } from '$lib/components/ui/badge'; import * as Tabs from '$lib/components/ui/tabs'; import * as Card from '$lib/components/ui/card'; + import * as Select from '$lib/components/ui/select'; import { ArrowLeft, Loader2, @@ -24,7 +27,18 @@ MapPin, Settings, FileText, - Hash + Hash, + FileKey, + Key, + Globe, + Folder, + Mail, + UserRound, + Fingerprint, + Lock, + Signature, + Archive, + ShieldCheck } from 'lucide-svelte'; import { toast } from 'svelte-sonner'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; @@ -40,6 +54,8 @@ let activeTab = $state('general'); let error = $state(null); let dataLoaded = $state(false); + let showCountryDialog = $state(false); + let showStateDialog = $state(false); let formData = $state({ broker_key: '', @@ -62,6 +78,28 @@ company_id: '' }); + let vuData = $state({ + certificate_path: '', + key_path: '', + xml_files_path: '', + fiel_access_key: '', + doda_web_service_user: '', + doda_web_service_access_key: '', + doda_certificate_path: '', + doda_key_path: '', + doda_fiel_access_key: '', + doda_xml_files_path: '', + web_service_user: '', + web_service_access_key: '', + query_tax_id: '', + vu_email: '', + vu_figure_type: '', + fiel_format: '', + access_key: '', + signature_read_path: '', + archive_path: '' + }); + let brokerKeyError = $state(false); let licenseError = $state(false); let brokerKeyTimeout: ReturnType; @@ -77,6 +115,16 @@ } }); + // --- 5. FUNCIONES --- + function handleLocalFileSelect(event: Event, targetKey: keyof typeof vuData) { + const input = event.target as HTMLInputElement; + const file = input.files?.[0]; + if (file) { + vuData[targetKey] = file.name; + toast.success(`Archivo ${file.name} seleccionado`); + } + } + async function loadBrokerData(key: string, cId: string) { if (!key || key === 'undefined') return; loading = true; @@ -106,9 +154,32 @@ company: d.company || '', company_id: cId }; + if (d.vu) { + vuData = { + certificate_path: d.vu.certificate_path || '', + key_path: d.vu.key_path || '', + xml_files_path: d.vu.xml_files_path || '', + fiel_access_key: d.vu.fiel_access_key || '', + doda_web_service_user: d.vu.doda_web_service_user || '', + doda_web_service_access_key: d.vu.doda_web_service_access_key || '', + doda_certificate_path: d.vu.doda_certificate_path || '', + doda_key_path: d.vu.doda_key_path || '', + doda_fiel_access_key: d.vu.doda_fiel_access_key || '', + doda_xml_files_path: d.vu.doda_xml_files_path || '', + web_service_user: d.vu.web_service_user || '', + web_service_access_key: d.vu.web_service_access_key || '', + query_tax_id: d.vu.query_tax_id || '', + vu_email: d.vu.vu_email || '', + vu_figure_type: d.vu.vu_figure_type || '', + fiel_format: d.vu.fiel_format || '', + access_key: d.vu.access_key || '', + signature_read_path: d.vu.signature_read_path || '', + archive_path: d.vu.archive_path || '' + }; + } dataLoaded = true; } else if (d.error) { - error = d.error; + error = d.error as string; toast.error(error); } } catch (e: any) { @@ -119,6 +190,18 @@ } } + function handleCountrySelect(country: any) { + const nextCountry = country.m3_key || country.mex_key || country.ame_key; + if (formData.country !== nextCountry) { + formData.state = ''; + } + formData.country = nextCountry; + } + + function handleStateSelect(state: any) { + formData.state = state.m3_key || state.mex_key || state.ame_key; + } + // --- 4. GUARDADO --- async function handleSave() { if (!companyStore.activeCompany) { @@ -151,15 +234,31 @@ formData.company_id = cId; const res = isEdit - ? await customsBrokersApi.update(routeId!, formData, cId) + ? await customsBrokersApi.update(routeId!, formData) : await customsBrokersApi.create(formData, cId); if ((res as any).error) throw new Error((res as any).error); + // UPSERT VU + try { + const vuRes = await customsBrokersApi.updateVU(formData.broker_key, vuData, cId); + if ((vuRes as any).error) { + toast.error( + 'Agente guardado, pero ocurrió un error guardando Ventanilla Única: ' + + (vuRes as any).error + ); + return; // Avoid triggering success redirection + } + } catch (vuErr: any) { + toast.error('Agente guardado, pero ocurrió un error guardando Ventanilla Única.'); + console.error(vuErr); + return; + } + toast.success(isEdit ? 'Agente actualizado' : 'Agente creado'); goto('/dashboard/customs_brokers'); } catch (e: any) { - error = e.message || 'Error al procesar la solicitud'; + error = (e.message || 'Error al procesar la solicitud') as string; toast.error(error); } finally { loading = false; @@ -176,6 +275,7 @@ irGeneral: () => (activeTab = 'general'), irContacto: () => (activeTab = 'contact'), irDireccion: () => (activeTab = 'address'), + irVU: () => (activeTab = 'vu'), guardar: handleSave, cancelar: handleCancel }) @@ -197,7 +297,7 @@ {isEdit ? 'Edición' : 'Nuevo'}
-

+

{isEdit ? 'Modifica la información del agente aduanal' : 'Registra un nuevo agente aduanal en el sistema'} @@ -224,7 +324,31 @@ Identificación oficial del agente y patente. -

+
+
+ + (formData.type = v)} + disabled={loading} + > + + {formData.type === 'MEX' + ? 'Agente Aduanal Mexicano' + : formData.type === 'USA' + ? 'Agente Aduanal Americano (Broker)' + : 'Selecciona un tipo...'} + + + Agente Aduanal Mexicano + Agente Aduanal Americano (Broker) + + +
+
+ +
{#if brokerKeyError} @@ -281,8 +405,8 @@ } }} placeholder="Ej. 3421" - maxlength="5" - class={licenseError ? 'border-red-500 focus-visible:ring-red-500' : ''} + maxlength={5} + class={`h-10 ${licenseError ? 'border-red-500 focus-visible:ring-red-500' : ''}`} disabled={loading} /> {#if licenseError} @@ -297,16 +421,22 @@
- +
-
+
@@ -315,6 +445,7 @@ bind:value={formData.personal_id} placeholder="CURP si aplica" disabled={loading} + class="h-10" />
@@ -330,13 +461,14 @@ Datos para comunicación con el agente. -
+
@@ -345,24 +477,26 @@ bind:value={formData.position} placeholder="Ej. Gerente Comercial" disabled={loading} + class="h-10" />
-
+
- +
@@ -371,6 +505,7 @@ bind:value={formData.email} placeholder="correo@empresa.com" disabled={loading} + class="h-10" />
@@ -392,26 +527,501 @@ bind:value={formData.address} placeholder="Dirección completa" disabled={loading} + class="h-10" />
-
+
- +
- +
-
+
- +
+ (showStateDialog = true)} + /> + +
- +
+ (showCountryDialog = true)} + /> + +
+
+
+ + + + + + + + + + Ventanilla Única / Web Services + Certificados y credenciales para integración con DODA/PITA. + + +
+
+ +
+ + handleLocalFileSelect(e, 'certificate_path')} + id="vu-cert-file" + /> + +
+
+
+ +
+ + handleLocalFileSelect(e, 'key_path')} + id="vu-key-file" + /> + +
+
+
+ +
+
+ + +
+
+ + + + {vuData.vu_figure_type || 'Seleccionar tipo de figura'} + + + AGENTE ADUANAL + APODERADO ADUANAL + MANDATARIO + + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + handleLocalFileSelect(e, 'xml_files_path')} + id="vu-cove-file" + /> + +
+
+
+ + + +
+

+ Configuración Adicional +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + + + + + DODA-PITA + Configuración de servicios DODA / PITA. + + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + handleLocalFileSelect(e, 'doda_certificate_path')} + id="doda-cert-file" + /> + +
+
+
+ +
+ + handleLocalFileSelect(e, 'doda_key_path')} + id="doda-key-file" + /> + +
+
+
+ +
+
+ + +
+
+ +
+ + handleLocalFileSelect(e, 'doda_xml_files_path')} + id="doda-xml-file" + /> + +
+
+
+
+
+
+ + + + ANAM + Configuración de acceso para ANAM. + + +
+
+ + +
+
+ +
@@ -424,22 +1034,19 @@
-
+
- - - General - - - Contacto - - - Dirección - + + General + Contacto + Domicilio + VU + DODA + ANAM
From 96757ffdd2f3541265ade3fede704395545e1d7c Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Tue, 24 Feb 2026 16:36:23 -0600 Subject: [PATCH 32/54] Se corrigio bug en las tareas --- .../api/v1/modules/core/help_center/tasks.py | 74 +++++++++++-------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/backend/api/v1/modules/core/help_center/tasks.py b/backend/api/v1/modules/core/help_center/tasks.py index 107df26d..659a015f 100644 --- a/backend/api/v1/modules/core/help_center/tasks.py +++ b/backend/api/v1/modules/core/help_center/tasks.py @@ -210,36 +210,52 @@ def sync_from_hub_task(): # 3. Aplicar actualizaciones for art_data in articles_data: - # Convertir string a datetime - server_updated_at = datetime.fromisoformat(art_data['updated_at']) + try: + # Logic similar to sync_article but simpler (Force Update from Hub) + # We assume Hub is Truth in this Polling flow + + # Try to find by UUID + local_article = db.query(HelpArticle).filter(HelpArticle.uuid == art_data['uuid']).first() + + # Fallback: find by Slug if UUID doesn't match + if not local_article: + local_article = db.query(HelpArticle).filter(HelpArticle.slug == art_data['slug']).first() + + server_updated_at = datetime.fromisoformat(art_data['updated_at']) + if server_updated_at.tzinfo is None: + server_updated_at = server_updated_at.replace(tzinfo=timezone.utc) + + if not local_article: + new_article = HelpArticle( + uuid=art_data['uuid'], + slug=art_data['slug'], + title=art_data['title'], + content=art_data['content'], + updated_at=server_updated_at, + last_editor=art_data['last_editor'], + category=art_data.get('category', "General"), + order=art_data.get('order', 0) + ) + db.add(new_article) + logger.info(f"Created new article: {art_data['slug']}") + else: + # Update existing article + # If UUID changed in Hub but slug is the same, we update UUID too + local_article.uuid = art_data['uuid'] + local_article.slug = art_data['slug'] + local_article.title = art_data['title'] + local_article.content = art_data['content'] + local_article.updated_at = server_updated_at + local_article.last_editor = art_data['last_editor'] + local_article.category = art_data.get('category', "General") + local_article.order = art_data.get('order', 0) + logger.info(f"Updated article: {art_data['slug']}") - # Logic similar to sync_article but simpler (Force Update from Hub) - # We assume Hub is Truth in this Polling flow - local_article = db.query(HelpArticle).filter(HelpArticle.uuid == art_data['uuid']).first() - - if not local_article: - new_article = HelpArticle( - uuid=art_data['uuid'], - slug=art_data['slug'], - title=art_data['title'], - content=art_data['content'], - updated_at=server_updated_at, - last_editor=art_data['last_editor'], - category=art_data.get('category', "General"), - order=art_data.get('order', 0) - ) - db.add(new_article) - else: - if server_updated_at > local_article.updated_at.replace(tzinfo=timezone.utc): - local_article.slug = art_data['slug'] - local_article.title = art_data['title'] - local_article.content = art_data['content'] - local_article.updated_at = server_updated_at - local_article.last_editor = art_data['last_editor'] - local_article.category = art_data.get('category', "General") - local_article.order = art_data.get('order', 0) - - db.commit() + db.commit() # Commit each article to avoid bulk failure + except Exception as e: + db.rollback() + logger.error(f"Error syncing article {art_data.get('slug', 'unknown')}: {e}") + # Download assets after bulk update (Polling) from .utils import download_file_from_hub, sync_assets_from_content From 2028c8764533e512af39b3e2a9ee5716f4917d65 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 24 Feb 2026 16:57:22 -0600 Subject: [PATCH 33/54] feat: Add state and sector selector dialogs with search and infinite scroll capabilities, and update gitignore to include mypy cache. --- .gitignore | 1 + .../modals/sector-selector-dialog.svelte | 226 ++++++++++++++++++ .../modals/state-selector-dialog.svelte | 224 +++++++++++++++++ 3 files changed, 451 insertions(+) create mode 100644 frontend/src/lib/components/dashboard/shared/modals/sector-selector-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/shared/modals/state-selector-dialog.svelte diff --git a/.gitignore b/.gitignore index 48bbc048..60db8bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Python __pycache__/ +.mypy_cache/ *.py[cod] *$py.class *.so diff --git a/frontend/src/lib/components/dashboard/shared/modals/sector-selector-dialog.svelte b/frontend/src/lib/components/dashboard/shared/modals/sector-selector-dialog.svelte new file mode 100644 index 00000000..dffe17af --- /dev/null +++ b/frontend/src/lib/components/dashboard/shared/modals/sector-selector-dialog.svelte @@ -0,0 +1,226 @@ + + + + + + Seleccionar Sector PROSEC + + Seleccione el sector del catálogo. Escrolea para ver más. + + + +
+ + +
+ +
+ {#if loading && items.length === 0} +
+ +

Cargando catálogo...

+
+ {:else if items.length === 0} +
+

No se encontraron sectores.

+
+ {:else} + + + + Clave + Descripción + Autorizado + + + + {#each items as item} + handleSelect(item)} + > + +
+ + + {item.key} + +
+
+ + {item.description} + + + + {item.authorized ? 'Sí' : 'No'} + + +
+ {/each} +
+
+ +
+ {#if loadingMore} + + {/if} +
+ {/if} +
+ + +
+ {items.length} de {totalItems} registros +
+ +
+
+
diff --git a/frontend/src/lib/components/dashboard/shared/modals/state-selector-dialog.svelte b/frontend/src/lib/components/dashboard/shared/modals/state-selector-dialog.svelte new file mode 100644 index 00000000..eb6f9c4c --- /dev/null +++ b/frontend/src/lib/components/dashboard/shared/modals/state-selector-dialog.svelte @@ -0,0 +1,224 @@ + + + + + + Seleccionar Estado + + Seleccione el estado del catálogo. Escrolea para ver más. + + + +
+ + +
+ +
+ {#if loading && items.length === 0} +
+ +

Cargando catálogo...

+
+ {:else if items.length === 0} +
+

No se encontraron estados.

+
+ {:else} + + + + Clave M3 + Descripción + MEX + + + + {#each items as item} + handleSelect(item)} + > + +
+ + + {item.m3_key} + +
+
+ + {item.description} + + + {item.mex_key || '-'} + +
+ {/each} +
+
+ +
+ {#if loadingMore} + + {/if} +
+ {/if} +
+ + +
+ {items.length} de {totalItems} registros +
+ +
+
+
From 980c913d4613a50e68b2c80d71eb34a73096eef8 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Tue, 24 Feb 2026 17:41:40 -0600 Subject: [PATCH 34/54] fix(customs-brokers): update VU and personnel for multi-tenancy support --- .gitignore | 1 + .../api/v1/modules/a76/customs_brokers/dto.py | 9 +- .../v1/modules/a76/customs_brokers/routes.py | 6 +- .../modules/a76/customs_brokers/services.py | 42 +++++++-- .../lib/api/dashboard/a76/customs-brokers.ts | 44 ++++++++-- .../dashboard/customs_brokers/+page.svelte | 87 +++++++++---------- 6 files changed, 124 insertions(+), 65 deletions(-) diff --git a/.gitignore b/.gitignore index 48bbc048..60db8bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Python __pycache__/ +.mypy_cache/ *.py[cod] *$py.class *.so diff --git a/backend/api/v1/modules/a76/customs_brokers/dto.py b/backend/api/v1/modules/a76/customs_brokers/dto.py index e7f38cba..9f1309c7 100644 --- a/backend/api/v1/modules/a76/customs_brokers/dto.py +++ b/backend/api/v1/modules/a76/customs_brokers/dto.py @@ -43,7 +43,7 @@ class CustomsBrokerResponseDTO(CustomsBrokerBaseDTO): broker_key: str tenant_id: int company_id: int - vu: Optional["CustomsBrokerVUCreateDTO"] = None + vu: Optional["CustomsBrokerVUResponseDTO"] = None class Config: from_attributes = True @@ -95,6 +95,11 @@ class CustomsBrokerVUCreateDTO(BaseModel): doda_web_service_access_key: Optional[str] = None doda_fiel_access_key: Optional[str] = None doda_xml_files_path: Optional[str] = None + tenant_id: Optional[int] = None + company_id: Optional[int] = None + +class CustomsBrokerVUResponseDTO(CustomsBrokerVUCreateDTO): + customs_broker_id: int class Config: from_attributes = True @@ -112,6 +117,8 @@ class CustomsBrokerPersonnelDTO(BaseModel): last_name: Optional[str] = None middle_name: Optional[str] = None email: Optional[str] = None + tenant_id: Optional[int] = None + company_id: Optional[int] = None class Config: from_attributes = True diff --git a/backend/api/v1/modules/a76/customs_brokers/routes.py b/backend/api/v1/modules/a76/customs_brokers/routes.py index e968ac78..541f41d9 100644 --- a/backend/api/v1/modules/a76/customs_brokers/routes.py +++ b/backend/api/v1/modules/a76/customs_brokers/routes.py @@ -62,7 +62,7 @@ def update_customs_broker( @router.put( "/customs-broker-vu/{broker_key}", - response_model=dto.CustomsBrokerVUCreateDTO, + response_model=dto.CustomsBrokerVUResponseDTO, ) def update_customs_broker_vu( broker_key: str, @@ -77,7 +77,7 @@ def update_customs_broker_vu( if not broker: raise HTTPException(status_code=404, detail="Customs Broker not found") - updated_vu = services.CustomsBrokerVUService.update_vu(db, broker_key, vu_data) + updated_vu = services.CustomsBrokerVUService.update_vu(db, broker_key, vu_data, tenant_id, company_id) if not updated_vu: raise HTTPException(status_code=404, detail="Customs Broker VU not found") return updated_vu @@ -102,7 +102,7 @@ def update_customs_broker_personnel( raise HTTPException(status_code=404, detail="Customs Broker not found") updated_personnel = services.CustomsBrokerPersonnelService.update_personnel( - db, broker_key, line, personnel_data + db, broker_key, line, personnel_data, tenant_id, company_id ) if not updated_personnel: raise HTTPException( diff --git a/backend/api/v1/modules/a76/customs_brokers/services.py b/backend/api/v1/modules/a76/customs_brokers/services.py index c1c10d68..dc00f352 100644 --- a/backend/api/v1/modules/a76/customs_brokers/services.py +++ b/backend/api/v1/modules/a76/customs_brokers/services.py @@ -90,9 +90,17 @@ class CustomsBrokerVUService: return new_vu @staticmethod - def update_vu(db: Session, broker_key: str, vu_data: dto.CustomsBrokerVUCreateDTO): + def update_vu(db: Session, broker_key: str, vu_data: dto.CustomsBrokerVUCreateDTO, tenant_id: int, company_id: int): # We need the custom broker ID to insert a new VU - broker = db.query(models.CustomsBroker).filter(models.CustomsBroker.broker_key == broker_key).first() + broker = ( + db.query(models.CustomsBroker) + .filter( + models.CustomsBroker.broker_key == broker_key, + models.CustomsBroker.tenant_id == tenant_id, + models.CustomsBroker.company_id == company_id, + ) + .first() + ) if not broker: return None @@ -108,6 +116,8 @@ class CustomsBrokerVUService: else: # Create new new_vu_data = vu_data.model_dump() + new_vu_data["tenant_id"] = tenant_id + new_vu_data["company_id"] = company_id new_vu = models.CustomsBrokerVU(customs_broker_id=broker.id, **new_vu_data) db.add(new_vu) db.commit() @@ -125,24 +135,36 @@ class CustomsBrokerVUService: class CustomsBrokerPersonnelService: @staticmethod - def get_by_broker_key_and_line(db: Session, broker_key: str, line: int): + def get_by_broker_key_and_line(db: Session, broker_key: str, line: int, tenant_id: int, company_id: int): return ( db.query(models.CustomsBrokerPersonnel) .join(models.CustomsBroker) .filter( models.CustomsBroker.broker_key == broker_key, models.CustomsBrokerPersonnel.line == line, + models.CustomsBroker.tenant_id == tenant_id, + models.CustomsBroker.company_id == company_id, ) .first() ) @staticmethod - def create_personnel(db: Session, broker_key: str, personnel_data: dto.CustomsBrokerPersonnelDTO): - broker = db.query(models.CustomsBroker).filter(models.CustomsBroker.broker_key == broker_key).first() + def create_personnel(db: Session, broker_key: str, personnel_data: dto.CustomsBrokerPersonnelDTO, tenant_id: int, company_id: int): + broker = ( + db.query(models.CustomsBroker) + .filter( + models.CustomsBroker.broker_key == broker_key, + models.CustomsBroker.tenant_id == tenant_id, + models.CustomsBroker.company_id == company_id, + ) + .first() + ) if not broker: return None new_personnel_data = personnel_data.model_dump() + new_personnel_data["tenant_id"] = tenant_id + new_personnel_data["company_id"] = company_id new_personnel = models.CustomsBrokerPersonnel(customs_broker_id=broker.id, **new_personnel_data) db.add(new_personnel) db.commit() @@ -155,16 +177,22 @@ class CustomsBrokerPersonnelService: broker_key: str, line: int, personnel_data: dto.CustomsBrokerPersonnelDTO, + tenant_id: int, + company_id: int, ): personnel = CustomsBrokerPersonnelService.get_by_broker_key_and_line( - db, broker_key, line + db, broker_key, line, tenant_id, company_id ) if personnel: for key, value in personnel_data.model_dump(exclude_unset=True).items(): setattr(personnel, key, value) db.commit() db.refresh(personnel) - return personnel + return personnel + else: + return CustomsBrokerPersonnelService.create_personnel( + db, broker_key, personnel_data, tenant_id, company_id + ) @staticmethod def delete_personnel(db: Session, broker_key: str, line: int): diff --git a/frontend/src/lib/api/dashboard/a76/customs-brokers.ts b/frontend/src/lib/api/dashboard/a76/customs-brokers.ts index f08c1726..1362a11a 100644 --- a/frontend/src/lib/api/dashboard/a76/customs-brokers.ts +++ b/frontend/src/lib/api/dashboard/a76/customs-brokers.ts @@ -1,4 +1,5 @@ import { api } from '$lib/api'; +import { companyStore } from '$lib/stores/company.svelte'; // <--- NUEVO: Importamos el store para el fallback import type { ApiResponse } from '$lib/api'; export interface CustomsBroker { @@ -26,6 +27,8 @@ export interface CustomsBroker { } export interface CustomsBrokerVU { + tenant_id?: string | null; + company_id?: string | null; certificate_path?: string | null; key_path?: string | null; access_key?: string | null; @@ -95,7 +98,9 @@ export interface CustomsBrokerListResponse { */ export const customsBrokersApi = { list: (companyId: string, page = 1, pageSize = 50) => { - return api.get(`/v1/a76/customs-brokers?company_id=${companyId}&page=${page}&page_size=${pageSize}`); + return api.get( + `/v1/a76/customs-brokers?company_id=${companyId}&page=${page}&page_size=${pageSize}` + ); }, get: (brokerKey: string, companyId: string) => { @@ -111,20 +116,47 @@ export const customsBrokersApi = { */ update: (brokerKey: string, data: CreateCustomsBrokerData) => { const companyId = data.company_id; - return api.put(`/v1/a76/customs-brokers/${brokerKey}/?company_id=${companyId}`, data); + return api.put( + `/v1/a76/customs-brokers/${brokerKey}/?company_id=${companyId}`, + data + ); }, /** * Elimina un agente aduanal */ delete: (brokerKey: string, companyId: string) => { - return api.delete(`/v1/a76/customs-brokers/${brokerKey}?company_id=${companyId}`); + return api.delete( + `/v1/a76/customs-brokers/${brokerKey}?company_id=${companyId}` + ); }, - - + /** + * Actualiza la información de Ventanilla Única (VU) + */ updateVU: (brokerKey: string, data: CustomsBrokerVU, companyId: string) => { - return api.put(`/v1/a76/customs-broker-vu/${brokerKey}?company_id=${companyId}`, data); + // LOGICA DE RESCATE: + // Si companyId llega nulo/undefined, intentamos obtenerlo del store global + let finalCompanyId = companyId; + + if (!finalCompanyId && companyStore.activeCompany?.id) { + finalCompanyId = companyStore.activeCompany.id.toString(); + console.warn("WARN: companyId no fue provisto a updateVU, usando companyStore:", finalCompanyId); + } + + // Aseguramos que el payload tenga los IDs + const payload = { + ...data, + company_id: finalCompanyId, + tenant_id: finalCompanyId + }; + + console.log('[DEBUG] Enviando payload VU:', payload); + + return api.put( + `/v1/a76/customs-broker-vu/${brokerKey}?company_id=${finalCompanyId}`, + payload + ); }, updatePersonnel: (brokerKey: string, line: number, data: CustomsBrokerPersonnel, companyId: string) => { diff --git a/frontend/src/routes/dashboard/customs_brokers/+page.svelte b/frontend/src/routes/dashboard/customs_brokers/+page.svelte index 5a92b518..611ce839 100644 --- a/frontend/src/routes/dashboard/customs_brokers/+page.svelte +++ b/frontend/src/routes/dashboard/customs_brokers/+page.svelte @@ -187,8 +187,7 @@ const brokerColumns = createBrokerColumns(handleActionSuccess); -
- +

GESTIÓN ADUANAL

@@ -196,17 +195,17 @@
- - + + Agentes Aduanales Secciones Aduanales @@ -214,13 +213,11 @@ - -
- -
-
+
+
+

Filtros

Busque por nombre o patente @@ -244,23 +241,20 @@ oninput={handleSearch} />
-
- -
+
- -
-
+
+

Listado

{filteredItems.length} registros
@@ -275,9 +269,8 @@ idField="broker_key" />
- {#if totalItems > pageSize} -
+
- + Página {currentPage} de {Math.ceil(totalItems / pageSize)}
-
-
-

+

+

Detalles del Agente

{selectedItem?.name || '---'}

-
- + Patente: {selectedItem?.broker_key || ''}
-
+
{#if selectedItem}
@@ -338,21 +330,21 @@ {#if selectedItem.tax_id}
-

{selectedItem.tax_id}

+

{selectedItem.tax_id}

{/if} -
+
-
+

{selectedItem.address || ''}

{[selectedItem.city, selectedItem.state].filter(Boolean).join(', ')} @@ -363,9 +355,9 @@

-
+
@@ -391,9 +383,9 @@
{:else}
- +

Selecciona un agente

{/if} @@ -401,9 +393,8 @@
- - - + +
-
+
{#if activeTab === 'brokers'} - {:else} {/if} From 97d868e863d5289a7719a27f79ed9f59c020180a Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Wed, 25 Feb 2026 09:00:15 -0600 Subject: [PATCH 35/54] feat(clients-providers): improve Programs tab UI and fix certified company toggle --- .../modules/a76/clients_and_providers/dto.py | 2 +- .../a76/clients_and_providers/models.py | 2 +- .../edit/[[id]]/+page.svelte | 317 +++++++++++++----- 3 files changed, 242 insertions(+), 79 deletions(-) diff --git a/backend/api/v1/modules/a76/clients_and_providers/dto.py b/backend/api/v1/modules/a76/clients_and_providers/dto.py index 624c99f1..292d9e41 100644 --- a/backend/api/v1/modules/a76/clients_and_providers/dto.py +++ b/backend/api/v1/modules/a76/clients_and_providers/dto.py @@ -46,7 +46,7 @@ class ClientProviderProgramsDTO(BaseModel): program_number: Optional[str] = Field( None, max_length=40, description="Program number" ) - prosec: Optional[int] = Field(None, description="PROSEC") + prosec: Optional[str] = Field(None, max_length=8, description="PROSEC") prosec_authorization: Optional[str] = Field( None, max_length=20, description="PROSEC authorization" ) diff --git a/backend/api/v1/modules/a76/clients_and_providers/models.py b/backend/api/v1/modules/a76/clients_and_providers/models.py index 4cf08fe0..db5544ca 100644 --- a/backend/api/v1/modules/a76/clients_and_providers/models.py +++ b/backend/api/v1/modules/a76/clients_and_providers/models.py @@ -136,7 +136,7 @@ class ClientProviderPrograms(Base, TenantScopedMixin, TimestampMixin): # Program information program: Mapped[Optional[str]] = mapped_column(String(7)) program_number: Mapped[Optional[str]] = mapped_column(String(40)) - prosec: Mapped[Optional[int]] = mapped_column(SmallInteger) + prosec: Mapped[Optional[str]] = mapped_column(String(8)) prosec_authorization: Mapped[Optional[str]] = mapped_column(String(20)) secon_auth_date: Mapped[Optional[int]] = mapped_column(Integer) manufacturer_id: Mapped[Optional[str]] = mapped_column(String(25)) diff --git a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte index 8f5bbad8..991a2507 100644 --- a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte @@ -22,10 +22,29 @@ FileText, Settings, User, - Trash2 + Trash2, + Search, + Globe, + MapPin as MapPinIcon, + Factory, + Calendar, + Hash, + ShieldCheck, + Award, + Fingerprint, + Briefcase } from 'lucide-svelte'; import { toast } from 'svelte-sonner'; + // Componentes Compartidos (Modales) + import CountrySelectorDialog from '$lib/components/dashboard/goods/modales/country-selector-dialog.svelte'; + import StateSelectorDialog from '$lib/components/dashboard/shared/modals/state-selector-dialog.svelte'; + import SectorSelectorDialog from '$lib/components/dashboard/shared/modals/sector-selector-dialog.svelte'; + + import { type Country } from '$lib/api/dashboard/reference_data/countries'; + import { type State } from '$lib/api/dashboard/reference_data/states'; + import { type Sector } from '$lib/api/dashboard/reference_data/sectors'; + // API & Stores import { clientsProvidersApi } from '$lib/api/dashboard/a76/clients-providers'; import { companyStore } from '$lib/stores/company.svelte'; @@ -73,17 +92,30 @@ program: '', program_number: '', authorization_date_str: '', // String para input date - prosec: 0, + prosec: '', manufacturer_id: '', tax_id: '', ctpat_svi: '', - is_certified_company: '0' + is_certified_company: false }); let formData = $state(getEmptyForm()); let loading = $state(false); let error = $state(null); + // --- ESTADO PARA MODALES --- + let countryModalOpen = $state(false); + let stateModalOpen = $state(false); + let sectorModalOpen = $state(false); + + const scaiiPrograms = [ + { value: 'IMMEX', label: 'IMMEX' }, + { value: 'PROSEC', label: 'PROSEC' }, + { value: 'ALTEX', label: 'ALTEX' }, + { value: 'ECEX', label: 'ECEX' }, + { value: 'DRAWBACK', label: 'DRAWBACK' } + ]; + // --- UTILIDADES --- const intDateToString = (d?: number | null) => d @@ -138,11 +170,11 @@ program: prog.program || '', program_number: prog.program_number || '', authorization_date_str: intDateToString(prog.secon_auth_date), - prosec: prog.prosec || 0, + prosec: prog.prosec ? String(prog.prosec) : '', manufacturer_id: prog.manufacturer_id || '', tax_id: prog.tax_id || '', ctpat_svi: prog.ctpat_svi || '', - is_certified_company: prog.is_certified_company || '0' + is_certified_company: prog.is_certified_company === '1' }; } } catch (e: any) { @@ -202,11 +234,11 @@ program: clean(formData.program), program_number: clean(formData.program_number), secon_auth_date: stringDateToInt(formData.authorization_date_str), - prosec: Number(formData.prosec) || null, + prosec: clean(formData.prosec), manufacturer_id: clean(formData.manufacturer_id), tax_id: clean(formData.tax_id), ctpat_svi: clean(formData.ctpat_svi), - is_certified_company: clean(formData.is_certified_company) + is_certified_company: formData.is_certified_company ? '1' : '0' } }; @@ -470,17 +502,44 @@
- +
+ + +
- +
+ + +
@@ -509,77 +568,160 @@ >Información sobre IMMEX, PROSEC y otras certificaciones. - -
-
- - + + +
+
+ + Programas de Fomento
-
- - + +
+
+ + (formData.program = v)} + disabled={loading} + > + + {formData.program || 'Selecciona un programa'} + + + {#each scaiiPrograms as prog} + + {prog.label} + + {/each} + + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
-
-
- - + +
+
+ + Identificación Industrial
-
- - -
-
- - + +
+
+ + +
+
+ + +
-
-
- - + +
+
+ + Certificaciones y Seguridad
-
- - + +
+
+ + +
+
+ +
+ +

+ Indica si cuenta con certificación de empresa +

+
+
@@ -670,3 +812,24 @@
+ + + (formData.country = country.m3_key)} +/> + + { + formData.state = state.description; + if (state.m3_key && !formData.country) { + formData.country = state.m3_key; + } + }} +/> + + (formData.prosec = sector.key)} +/> From 899a5c4d58e7f3ef5937e4350289782c344120ca Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Wed, 25 Feb 2026 09:16:42 -0600 Subject: [PATCH 36/54] fix(pedimentos): various fixes and improvements for pedimento processing and reports --- .gitignore | 4 +- backend/alembic/env.py | 37 +- .../7937209f9718_seed_initial_data.py | 21 +- .../v1/modules/a24/fa/fa_item_lines/models.py | 2 +- .../modules/a24/fa/fa_item_lines/service.py | 2 +- .../api/v1/modules/a76/audit_log/events.py | 50 +- .../v1/modules/a76/audit_log/middleware.py | 7 +- .../api/v1/modules/a76/audit_log/models.py | 27 +- .../v1/modules/a76/audit_log/services/core.py | 4 + .../modules/a76/audit_log/services/service.py | 37 +- .../modules/a76/audit_log/utils/__init__.py | 7 + .../a76/audit_log/utils/serialization.py | 44 + backend/api/v1/modules/a76/classes/dto.py | 1 + backend/api/v1/modules/a76/classes/service.py | 1 + .../a76/clients_and_providers/routes.py | 7 +- .../api/v1/modules/a76/customs_brokers/dto.py | 55 +- .../v1/modules/a76/customs_brokers/models.py | 2 +- .../modules/a76/customs_brokers/services.py | 38 +- .../a76/general_catalogs/company/dto.py | 352 +- .../a76/general_catalogs/company/routes.py | 98 + .../a76/general_catalogs/company/service.py | 525 +- .../canadian_tariff_fractions/__init__.py | 0 .../canadian_tariff_fractions/models.py | 29 + .../canadian_tariff_fractions/routes.py | 98 + .../canadian_tariff_fractions/schemas.py | 32 + .../canadian_tariff_fractions/service.py | 73 + .../historical_tariff_fractions/dto.py | 29 + .../historical_tariff_fractions/models.py | 4 +- .../historical_tariff_fractions/routes.py | 101 + .../historical_tariff_fractions/schemas.py | 45 + .../historical_tariff_fractions/seed.py | 13180 ++++++++-------- .../historical_tariff_fractions/service.py | 69 + .../fractions/tariff_fractions/routes.py | 140 +- .../fractions/tariff_fractions/service.py | 117 +- .../fractions/us_tariff_fractions/models.py | 18 +- .../v1/modules/a76/general_catalogs/router.py | 10 +- .../api/v1/modules/a76/imports/__init__.py | 0 backend/api/v1/modules/a76/imports/routes.py | 118 + backend/api/v1/modules/a76/imports/schemas.py | 20 + backend/api/v1/modules/a76/imports/tasks.py | 875 + .../v1/modules/a76/invoice_settings/dto.py | 8 +- .../v1/modules/a76/invoice_settings/routes.py | 3 +- .../modules/a76/invoice_settings/services.py | 4 +- .../modules/a76/invoices/catalog_service.py | 4 +- .../imports/temporary/validators/common.py | 10 +- .../imports/temporary/validators/update.py | 254 +- .../api/v1/modules/a76/invoices/schemas.py | 4 +- .../api/v1/modules/a76/invoices/services.py | 41 +- backend/api/v1/modules/a76/items/__init__.py | 4 +- .../a76/items/common/common_validators.py | 10 +- .../temporary/validators/calculations.py | 79 + .../imports/temporary/validators/common.py | 19 +- .../imports/temporary/validators/create.py | 43 +- .../imports/temporary/validators/update.py | 44 +- .../modules/a76/items/line_customs/models.py | 2 +- .../a76/items/line_descriptions/models.py | 2 +- .../a76/items/line_financials/models.py | 2 +- .../modules/a76/items/line_items/__init__.py | 16 - .../v1/modules/a76/items/line_items/models.py | 200 - .../modules/a76/items/line_items/schemas.py | 293 - .../a76/items/line_quantities/models.py | 2 +- .../a76/items/line_references/models.py | 2 +- backend/api/v1/modules/a76/items/models.py | 235 +- backend/api/v1/modules/a76/items/routes.py | 27 +- backend/api/v1/modules/a76/items/schemas.py | 328 +- backend/api/v1/modules/a76/items/service.py | 506 +- .../dtos/pedimento_decrementables.py | 8 +- .../dtos/pedimento_incrementables.py | 8 +- .../models/pedimento_rectification_origin.py | 28 +- .../pedimento_rectification_destination.py | 1 + .../pedimento_rectification_origin.py | 1 + .../a76/pedmientos/services/pedimentos.py | 46 +- .../exportacion/aviso_consolidado/service.py | 45 +- .../reports/exportacion/descargo/service.py | 22 +- .../transmission/MAINX30/__init__.py | 0 .../transmission/MAINX30/processors.py | 356 + .../transmission/MAINX30/routes.py | 43 + .../transmission/MAINX30/schemas.py | 71 + .../transmission/MAINX30/service.py | 300 + .../exportacion/transmission/MAINX30/task.py | 46 + .../importacion/consolidados/mex/service.py | 23 +- .../consolidados/temporary/mex/service.py | 11 +- .../importacion/facturas/mex/service.py | 29 +- .../reports/importacion/facturas/routes.py | 3 +- .../facturas/temporary/mex/service.py | 11 +- .../importacion/facturas/usa/service.py | 547 +- .../importacion/packing_list/service.py | 57 +- .../definitive/MAINX30/processors.py | 369 + .../transmission/definitive/MAINX30/routes.py | 41 + .../definitive/MAINX30/schemas.py | 72 + .../definitive/MAINX30/service.py | 175 + .../transmission/definitive/MAINX30/task.py | 45 + .../temporal/MAINX30/processors.py | 427 + .../transmission/temporal/MAINX30/routes.py | 43 + .../transmission/temporal/MAINX30/schemas.py | 77 + .../transmission/temporal/MAINX30/service.py | 177 + .../transmission/temporal/MAINX30/task.py | 46 + .../modules/a76/reports/movements/__init__.py | 0 .../reports/movements/invoices/__init__.py | 0 .../reports/movements/invoices/csv_utils.py | 151 + .../movements/invoices/movement_service.py | 316 + .../a76/reports/movements/invoices/routes.py | 748 + .../a76/reports/movements/invoices/schemas.py | 609 + .../reports/movements/invoices/services.py | 112 + .../movements/invoices/services/__init__.py | 26 + .../movements/invoices/services/base.py | 85 + .../invoices/services/database_helpers.py | 520 + .../movements/invoices/services/definitive.py | 383 + .../invoices/services/exchange_rate.py | 193 + .../movements/invoices/services/export.py | 408 + .../invoices/services/export_repair.py | 409 + .../invoices/services/query_builders.py | 1071 ++ .../invoices/services/query_builders.py.bak | 877 + .../movements/invoices/services/repair.py | 400 + .../movements/invoices/services/temporary.py | 459 + .../movements/invoices/services_old.py | 2115 +++ .../a76/reports/movements/invoices/tasks.py | 108 + backend/api/v1/modules/a76/router.py | 35 +- .../api/v1/modules/core/dashboard/service.py | 6 +- .../public/reference_data/sectors/dto.py | 2 +- .../public/reference_data/sectors/routes.py | 64 +- .../v1/modules/sitar/common/base_service.py | 2 + .../modules/sitar/fracciones_usa/schemas.py | 2 +- .../modules/sitar/fracciones_usa/service.py | 10 +- backend/api/v1/router.py | 2 +- backend/core/celery_app.py | 13 +- backend/core/config.py | 8 + backend/core/email.py | 117 + backend/core/error_handlers.py | 41 +- backend/core/middleware.py | 41 +- backend/main.py | 90 +- backend/requirements.txt | 4 +- docker-compose.yml | 16 + .../src/lib/api/dashboard/a24/fa_classes.ts | 2 +- frontend/src/lib/api/dashboard/a76/classes.ts | 2 + .../lib/api/dashboard/a76/customs-brokers.ts | 1 + .../dashboard/a76/general_catalogs/company.ts | 220 +- .../historical-tariff-fractions.ts | 103 + .../a76/general_catalogs/tariff-fractions.ts | 23 +- .../api/dashboard/a76/invoice-movements.ts | 203 + .../src/lib/api/dashboard/a76/invoices.ts | 1 + frontend/src/lib/api/dashboard/a76/items.ts | 63 +- .../src/lib/api/dashboard/a76/pedimentos.ts | 22 +- .../a76/reports/reports-transmission.ts | 95 + .../dashboard/general_catalogs/canadian.ts | 77 + .../api/dashboard/general_catalogs/sectors.ts | 35 + .../dashboard/csv-upload/ConfigFooter.svelte | 96 + .../csv-upload/ProcessingResultModal.svelte | 275 + .../csv-upload/UniversalUploadModal.svelte | 123 + .../csv-upload/UploadLauncherGrid.svelte | 264 + .../dashboard/customs_brokers/columns.ts | 18 +- .../sectors/SectorsList.svelte | 188 + .../classes/forms/FixedAssetClassForm.svelte | 20 +- .../fractions/CanadianFractionDialog.svelte | 180 + .../fractions/CanadianFractionList.svelte | 266 + .../fractions/HistoricalFractionDialog.svelte | 262 + .../fractions/HistoricalFractionList.svelte | 283 + .../fractions/TariffFractionFormDialog.svelte | 198 + .../goods/fractions/TariffFractionList.svelte | 317 + .../modales/TariffFractionSelector.svelte | 21 +- .../invoices/edit/InvoiceSelectorModal.svelte | 138 + .../invoices/edit/general-tab-form.svelte | 551 +- .../invoices/edit/invoice-top-fields.svelte | 1 + .../edit/items/fa/item-configuration.svelte | 140 +- .../edit/items/fa/item-sheet-fa.svelte | 39 +- .../invoices/edit/items/fa/main-data.svelte | 96 +- .../edit/items/fa/state-dialog.svelte | 153 + .../edit/items/fa/summary-section.svelte | 83 +- .../edit/items/fa/tab-continuation.svelte | 12 +- .../edit/items/fa/tab-identifiers.svelte | 4 +- .../edit/items/inv/item-sheet-inv.svelte | 69 +- .../invoices/edit/items/items-tab-form.svelte | 614 +- .../invoices/edit/others-tab-form.svelte | 19 +- .../dashboard/invoices/edit/save-invoice.ts | 14 +- .../invoices/pdf-progress-dialog.svelte | 232 +- .../transferencia-electronica-modal.svelte | 679 + .../edit/other-data-tab-form.svelte | 313 +- .../keyboard/KeyboardManager.svelte | 1 + .../src/lib/components/sidebar/modules.ts | 29 +- .../components/sidebar/nav-projects.svelte | 33 +- .../lib/components/ui/icons/FolderIcon.svelte | 6 + .../components/ui/select/select-root.svelte | 22 +- frontend/src/lib/config/csv-upload.ts | 366 + .../dashboard/customs_brokers/edit.ts | 6 + frontend/src/lib/date-utils.ts | 4 +- frontend/src/lib/utils/items-logic.ts | 53 +- .../rate/+server.ts | 71 + frontend/src/routes/dashboard/+layout.svelte | 2 +- .../edit/[[id]]/+page.svelte | 44 +- .../routes/dashboard/csv-upload/+page.svelte | 209 + .../customs_brokers/edit/[[id]]/+page.svelte | 673 +- .../company_information/+page.svelte | 13 +- .../edit/[[id]]/+page.svelte | 1830 ++- .../general_catalogs/sectors/+page.svelte | 5 + .../tariff-fractions/american/+page.svelte | 6 + .../tariff-fractions/canadian/+page.svelte | 11 + .../tariff-fractions/historical/+page.svelte | 6 + .../seventh-amendment/+page.svelte | 11 + .../tariff-fractions/sitar/+page.svelte | 11 + .../tariff-fractions/us/+page.svelte | 6 + .../goods/fixed-asset-classes/+page.svelte | 301 +- .../routes/dashboard/invoices/+page.svelte | 64 +- .../dashboard/invoices/edit/[id]/+page.svelte | 27 +- .../invoices/items/presets/+page.svelte | 24 +- .../routes/dashboard/pedimentos/+page.svelte | 39 +- .../pedimentos/edit/[id]/+page.svelte | 112 +- .../reports/invoices/+page.server.ts | 15 + .../dashboard/reports/invoices/+page.svelte | 1802 +++ .../static/csv/EstructuraCatAgenteAduanal.xls | 1 + frontend/static/csv/EstructuraCatClasesAF.xls | 1 + .../static/csv/EstructuraCatClienteProv.xls | 1 + .../static/csv/EstructuraCatConductor.xls | 1 + frontend/static/csv/EstructuraCatFraccAme.xls | 1 + frontend/static/csv/EstructuraCatPartesAF.xls | 1 + .../static/csv/EstructuraCatPedimentos.xls | 1 + .../static/csv/EstructuraCatTiposCambio.xls | 1 + frontend/static/csv/EstructuraCatTrailers.xls | 1 + .../static/csv/EstructuraCatTransportes.xls | 1 + .../static/csv/EstructuraEncFacExpoCamReg.xls | 1 + .../static/csv/EstructuraEncFacImpoDef.xls | 1 + .../static/csv/EstructuraEncFacImpoTemp.xls | 1 + .../static/csv/EstructuraParExpoCamReg.xls | 1 + .../static/csv/EstructuraParFacImpoDefAF.xls | 1 + .../static/csv/EstructuraParFacImpoTempAF.xls | 1 + pnpm-lock.yaml | 157 - reinicio.sh | 2 + scripts/init_first_time.sh | 207 + 227 files changed, 32961 insertions(+), 10730 deletions(-) create mode 100644 backend/api/v1/modules/a76/audit_log/utils/__init__.py create mode 100644 backend/api/v1/modules/a76/audit_log/utils/serialization.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/__init__.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/models.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/routes.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/schemas.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/service.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/dto.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/routes.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/schemas.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/service.py create mode 100644 backend/api/v1/modules/a76/imports/__init__.py create mode 100644 backend/api/v1/modules/a76/imports/routes.py create mode 100644 backend/api/v1/modules/a76/imports/schemas.py create mode 100644 backend/api/v1/modules/a76/imports/tasks.py create mode 100644 backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py delete mode 100644 backend/api/v1/modules/a76/items/line_items/__init__.py delete mode 100644 backend/api/v1/modules/a76/items/line_items/models.py delete mode 100644 backend/api/v1/modules/a76/items/line_items/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/processors.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/routes.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/service.py create mode 100644 backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/task.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/processors.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/routes.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/service.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/task.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/processors.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/routes.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/service.py create mode 100644 backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/task.py create mode 100644 backend/api/v1/modules/a76/reports/movements/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/routes.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/schemas.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/base.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/export.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/services_old.py create mode 100644 backend/api/v1/modules/a76/reports/movements/invoices/tasks.py create mode 100644 backend/core/email.py create mode 100644 frontend/src/lib/api/dashboard/a76/general_catalogs/historical-tariff-fractions.ts create mode 100644 frontend/src/lib/api/dashboard/a76/invoice-movements.ts create mode 100644 frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts create mode 100644 frontend/src/lib/api/dashboard/general_catalogs/canadian.ts create mode 100644 frontend/src/lib/api/dashboard/general_catalogs/sectors.ts create mode 100644 frontend/src/lib/components/dashboard/csv-upload/ConfigFooter.svelte create mode 100644 frontend/src/lib/components/dashboard/csv-upload/ProcessingResultModal.svelte create mode 100644 frontend/src/lib/components/dashboard/csv-upload/UniversalUploadModal.svelte create mode 100644 frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte create mode 100644 frontend/src/lib/components/dashboard/general_catalogs/sectors/SectorsList.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/CanadianFractionDialog.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/CanadianFractionList.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionDialog.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/HistoricalFractionList.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte create mode 100644 frontend/src/lib/components/dashboard/goods/fractions/TariffFractionList.svelte create mode 100644 frontend/src/lib/components/dashboard/invoices/edit/InvoiceSelectorModal.svelte create mode 100644 frontend/src/lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte create mode 100644 frontend/src/lib/components/ui/icons/FolderIcon.svelte create mode 100644 frontend/src/lib/config/csv-upload.ts create mode 100644 frontend/src/routes/api-sveltekit/historical-tariff-fractions/rate/+server.ts create mode 100644 frontend/src/routes/dashboard/csv-upload/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/sectors/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/american/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/canadian/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/historical/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/seventh-amendment/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/sitar/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/tariff-fractions/us/+page.svelte create mode 100644 frontend/src/routes/dashboard/reports/invoices/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reports/invoices/+page.svelte create mode 100644 frontend/static/csv/EstructuraCatAgenteAduanal.xls create mode 100644 frontend/static/csv/EstructuraCatClasesAF.xls create mode 100644 frontend/static/csv/EstructuraCatClienteProv.xls create mode 100644 frontend/static/csv/EstructuraCatConductor.xls create mode 100644 frontend/static/csv/EstructuraCatFraccAme.xls create mode 100644 frontend/static/csv/EstructuraCatPartesAF.xls create mode 100644 frontend/static/csv/EstructuraCatPedimentos.xls create mode 100644 frontend/static/csv/EstructuraCatTiposCambio.xls create mode 100644 frontend/static/csv/EstructuraCatTrailers.xls create mode 100644 frontend/static/csv/EstructuraCatTransportes.xls create mode 100644 frontend/static/csv/EstructuraEncFacExpoCamReg.xls create mode 100644 frontend/static/csv/EstructuraEncFacImpoDef.xls create mode 100644 frontend/static/csv/EstructuraEncFacImpoTemp.xls create mode 100644 frontend/static/csv/EstructuraParExpoCamReg.xls create mode 100644 frontend/static/csv/EstructuraParFacImpoDefAF.xls create mode 100644 frontend/static/csv/EstructuraParFacImpoTempAF.xls delete mode 100644 pnpm-lock.yaml create mode 100755 reinicio.sh diff --git a/.gitignore b/.gitignore index 1da35013..2b9781b3 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,6 @@ node_modules/ # Docker *.dockerignore postgres-data/ -backend/uploads/ \ No newline at end of file +backend/uploads/ +docker-compose.yml +.mypy_cache/ diff --git a/backend/alembic/env.py b/backend/alembic/env.py index 097cb079..348bcb40 100644 --- a/backend/alembic/env.py +++ b/backend/alembic/env.py @@ -80,33 +80,36 @@ target_metadata = Base.metadata def import_models_from_dir(dir_path: str): """Importa recursivamente cualquier archivo models.py desde dir_path y archivos en directorios models/""" + import sys + + def _load_module(module_path: str): + rel_path = os.path.relpath(module_path, BASE_DIR) + module_name = rel_path.replace(os.sep, ".").replace(".py", "") + # Skip if already loaded to avoid duplicate SQLAlchemy table registrations + if module_name in sys.modules: + return + spec = importlib.util.spec_from_file_location(module_name, module_path) + mod = importlib.util.module_from_spec(spec) + # Register in sys.modules before exec so transitive imports resolve correctly + sys.modules[module_name] = mod + spec.loader.exec_module(mod) + for root, dirs, files in os.walk(dir_path): # Importar archivos models.py directos if "models.py" in files: - module_path = os.path.join(root, "models.py") - # Convertir path en nombre de módulo compatible - rel_path = os.path.relpath(module_path, BASE_DIR) - module_name = rel_path.replace(os.sep, ".").replace(".py", "") - # Lazy import - spec = importlib.util.spec_from_file_location(module_name, module_path) - mod = importlib.util.module_from_spec(spec) - spec.loader.exec_module(mod) + try: + _load_module(os.path.join(root, "models.py")) + except Exception as e: + logger.warning(f"No se pudo importar {os.path.join(root, 'models.py')}: {e}") # Importar todos los archivos .py en directorios llamados "models" if os.path.basename(root) == "models": for file in files: if file.endswith(".py") and not file.startswith("__"): - module_path = os.path.join(root, file) - rel_path = os.path.relpath(module_path, BASE_DIR) - module_name = rel_path.replace(os.sep, ".").replace(".py", "") try: - spec = importlib.util.spec_from_file_location( - module_name, module_path - ) - mod = importlib.util.module_from_spec(spec) - spec.loader.exec_module(mod) + _load_module(os.path.join(root, file)) except Exception as e: - logger.warning(f"No se pudo importar {module_path}: {e}") + logger.warning(f"No se pudo importar {os.path.join(root, file)}: {e}") # Importar todos los models dentro de api/v1/modules y api/v1/modules/uploads diff --git a/backend/alembic/versions/7937209f9718_seed_initial_data.py b/backend/alembic/versions/7937209f9718_seed_initial_data.py index 586a1da6..a6fda94d 100644 --- a/backend/alembic/versions/7937209f9718_seed_initial_data.py +++ b/backend/alembic/versions/7937209f9718_seed_initial_data.py @@ -1,7 +1,8 @@ """seed_initial_data Revision ID: 7937209f9718 -Revises: 531bf8cdae06 +Revises: + Create Date: 2025-10-19 18:23:55.258800 """ @@ -95,7 +96,6 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: """Upgrade schema.""" - # --- UTILIDAD DE FORMATEO --- def format_value(val): if val is None or str(val).strip() == "" or str(val).upper() == "NONE": return "NULL" @@ -516,31 +516,38 @@ def upgrade() -> None: values_historical_fractions = ", ".join( [ - f"({format_value(historical_fraction)}, {format_value(unit_measure)}, {format_value(country)}, " + f"({format_value(historical_fraction)}, {format_value(nico)},{format_value(unit_measure)}, {format_value(country)}, " f"{format_value(fraction_type)}, {format_value(sector)}, {format_value(import_tax)}, " f"{format_value(export_tax)}, {format_timestamp(pub_date)}, {format_bool(is_immex)}, " f"{format_bool(normal_temp)}, {format_bool(services_temp)}, {format_bool(certified_temp)}, " - f"{format_bool(by_log)}, {format_timestamp(end_date)})" - for historical_fraction, unit_measure, country, fraction_type, sector, import_tax, export_tax, pub_date, is_immex, normal_temp, services_temp, certified_temp, by_log, end_date in historical_tariff_fractions_seed + f"{format_bool(by_log)}, {format_timestamp(end_date)}, " + f"1, 1)" # tenant_id=1, company_id=1 + for historical_fraction, nico, unit_measure, country, fraction_type, sector, import_tax, export_tax, pub_date, is_immex, normal_temp, services_temp, certified_temp, by_log, end_date in historical_tariff_fractions_seed ] ) if values_historical_fractions: + op.execute("SET session_replication_role = replica;") op.execute( f""" INSERT INTO a76.historical_tariff_fractions - (historical_fraction, unit_of_measure_code, country, fraction_type, sector, + (historical_fraction, nico, unit_of_measure_code, country, fraction_type, sector, import_tax_rate, export_tax_rate, publication_date, is_immex, - normal_temporality, services_temporality, certified_temporality, by_log, end_date) + normal_temporality, services_temporality, certified_temporality, by_log, end_date, + tenant_id, company_id) VALUES {values_historical_fractions} ON CONFLICT DO NOTHING; """ ) + op.execute("SET session_replication_role = DEFAULT;") def downgrade() -> None: """Downgrade schema.""" + op.drop_table("us_tariff_fractions", schema="a76") + op.drop_table("historical_tariff_fractions", schema="a76") + op.drop_table("canadian_tariff_fractions", schema="a76") op.drop_table("valuation_methods", schema="public") op.drop_table("transport_types", schema="public") op.drop_table("trailer_types", schema="public") diff --git a/backend/api/v1/modules/a24/fa/fa_item_lines/models.py b/backend/api/v1/modules/a24/fa/fa_item_lines/models.py index 3ca32851..75496b34 100644 --- a/backend/api/v1/modules/a24/fa/fa_item_lines/models.py +++ b/backend/api/v1/modules/a24/fa/fa_item_lines/models.py @@ -16,7 +16,7 @@ from api.v1.common.base_models import TenantScopedMixin, TimestampMixin from core.database import Base if TYPE_CHECKING: - from api.v1.modules.a76.items.line_items.models import LineItem + from api.v1.modules.a76.items.models import LineItem class FaLineItem(Base, TenantScopedMixin, TimestampMixin): diff --git a/backend/api/v1/modules/a24/fa/fa_item_lines/service.py b/backend/api/v1/modules/a24/fa/fa_item_lines/service.py index f60feec0..890307bf 100644 --- a/backend/api/v1/modules/a24/fa/fa_item_lines/service.py +++ b/backend/api/v1/modules/a24/fa/fa_item_lines/service.py @@ -96,7 +96,7 @@ class FaLineItemService: """Crear una nueva línea de activo fijo""" try: # Verificar que la línea base existe en a76.item_lines - from api.v1.modules.a76.items.line_items.models import LineItem + from api.v1.modules.a76.items.models import LineItem base_line_item = ( db.query(LineItem) diff --git a/backend/api/v1/modules/a76/audit_log/events.py b/backend/api/v1/modules/a76/audit_log/events.py index 478ef95c..7a79bedb 100644 --- a/backend/api/v1/modules/a76/audit_log/events.py +++ b/backend/api/v1/modules/a76/audit_log/events.py @@ -1,11 +1,14 @@ """ Audit Log Events """ + from sqlalchemy import event, inspect from sqlalchemy.orm import Session from .services.service import AuditService +from .utils.serialization import serialize_for_json from core.context import get_user_context + def register_audit_listeners(models_to_audit): """ Register SQLAlchemy listeners for given models @@ -15,16 +18,23 @@ def register_audit_listeners(models_to_audit): event.listen(model, "after_update", after_update_listener) event.listen(model, "after_delete", after_delete_listener) + def _get_current_username(): try: context = get_user_context() if context: # Token usually has 'preferred_username' or 'name' or 'sub' - return context.get("preferred_username") or context.get("email") or context.get("sub") or "System" + return ( + context.get("preferred_username") + or context.get("email") + or context.get("sub") + or "System" + ) except: pass return "System" + def after_insert_listener(mapper, connection, target): """ Listener for INSERT operations @@ -32,8 +42,9 @@ def after_insert_listener(mapper, connection, target): table_name = target.__tablename__ record_data = {c.name: getattr(target, c.name) for c in mapper.columns} username = _get_current_username() - company_id = getattr(target, "company_id", None) - + company_id = getattr(target, "company_id", None) or getattr(target, "id", None) + tenant_id = getattr(target, "tenant_id", None) + # Create a session bound to the connection session = Session(bind=connection) try: @@ -44,24 +55,26 @@ def after_insert_listener(mapper, connection, target): record_data=record_data, username=username, record_id=str(getattr(target, "id", "")), - company_id=company_id + company_id=company_id, + tenant_id=tenant_id, ) except Exception as e: print(f"Error logging insert: {e}") finally: session.close() + def after_update_listener(mapper, connection, target): """ Listener for UPDATE operations """ table_name = target.__tablename__ - + state = inspect(target) changes = {} old_values = {} new_values = {} - + for attr in state.attrs: hist = attr.history if hist.has_changes(): @@ -74,6 +87,8 @@ def after_update_listener(mapper, connection, target): record_data = {c.name: getattr(target, c.name) for c in mapper.columns} username = _get_current_username() + company_id = getattr(target, "company_id", None) or getattr(target, "id", None) + tenant_id = getattr(target, "tenant_id", None) session = Session(bind=connection) try: @@ -84,13 +99,16 @@ def after_update_listener(mapper, connection, target): record_data=record_data, username=username, record_id=str(getattr(target, "id", "")), - old_values=old_values, - new_values=new_values + old_values=serialize_for_json(old_values), + new_values=serialize_for_json(new_values), + company_id=company_id, + tenant_id=tenant_id, ) except Exception as e: - print(f"Error logging update: {e}") + print(f"Error logging update: {e}") finally: - session.close() + session.close() + def after_delete_listener(mapper, connection, target): """ @@ -99,7 +117,9 @@ def after_delete_listener(mapper, connection, target): table_name = target.__tablename__ record_data = {c.name: getattr(target, c.name) for c in mapper.columns} username = _get_current_username() - + company_id = getattr(target, "company_id", None) or getattr(target, "id", None) + tenant_id = getattr(target, "tenant_id", None) + session = Session(bind=connection) try: AuditService.log_crud_operation( @@ -108,9 +128,11 @@ def after_delete_listener(mapper, connection, target): operation_type="DELETE", record_data=record_data, username=username, - record_id=str(getattr(target, "id", "")) + record_id=str(getattr(target, "id", "")), + company_id=company_id, + tenant_id=tenant_id, ) except Exception as e: - print(f"Error logging delete: {e}") + print(f"Error logging delete: {e}") finally: - session.close() + session.close() diff --git a/backend/api/v1/modules/a76/audit_log/middleware.py b/backend/api/v1/modules/a76/audit_log/middleware.py index fe2c111a..0d16a79b 100644 --- a/backend/api/v1/modules/a76/audit_log/middleware.py +++ b/backend/api/v1/modules/a76/audit_log/middleware.py @@ -18,5 +18,10 @@ class UserContextMiddleware(BaseHTTPMiddleware): # Log error or ignore pass - response = await call_next(request) + try: + response = await call_next(request) + except Exception: + # Re-raise the exception to let other middleware and handlers deal with it + raise + return response diff --git a/backend/api/v1/modules/a76/audit_log/models.py b/backend/api/v1/modules/a76/audit_log/models.py index c47900f5..ace69a32 100644 --- a/backend/api/v1/modules/a76/audit_log/models.py +++ b/backend/api/v1/modules/a76/audit_log/models.py @@ -4,10 +4,18 @@ Audit Log Models from sqlalchemy import Column, Integer, String, Date, Time, DateTime, Text, Index, func from sqlalchemy.dialects.postgresql import JSONB, ARRAY +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin from core.database import Base -class AuditLog(Base): +class AuditLog(Base, TenantScopedMixin, TimestampMixin): __tablename__ = "audit_logs" + __table_args__ = ( + Index('idx_audit_username_date', 'username', 'date'), + Index('idx_audit_procedure_date', 'procedure', 'date'), + Index('idx_audit_system_timestamp', 'system', 'timestamp'), + Index('idx_audit_table_record', 'table_name', 'record_id'), + {"schema": "a76"} # Use the a76 schema for audit logs + ) # Primary Key spec_id = Column(Integer, primary_key=True, autoincrement=True) @@ -22,9 +30,7 @@ class AuditLog(Base): # Technical Columns timestamp = Column(DateTime(timezone=True), nullable=False, index=True) # Combined for queries - system = Column(String(20), nullable=False, index=True, default="SCAF") - company_id = Column(Integer, nullable=True, index=True) - tenant_id = Column(Integer, nullable=True, index=True) + system = Column(String(20), nullable=False, index=True, default="fixed_asset") # Traceability table_name = Column(String(100), nullable=True, index=True) @@ -42,15 +48,4 @@ class AuditLog(Base): endpoint = Column(String(500), nullable=True) request_method = Column(String(10), nullable=True) session_id = Column(String(50), nullable=True, index=True) - execution_time_ms = Column(Integer, nullable=True) - - # Metadata - created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) - - # Composite Indexes for common filters - __table_args__ = ( - Index('idx_audit_username_date', 'username', 'date'), - Index('idx_audit_procedure_date', 'procedure', 'date'), - Index('idx_audit_system_timestamp', 'system', 'timestamp'), - Index('idx_audit_table_record', 'table_name', 'record_id'), - ) + execution_time_ms = Column(Integer, nullable=True) diff --git a/backend/api/v1/modules/a76/audit_log/services/core.py b/backend/api/v1/modules/a76/audit_log/services/core.py index dfb5f2b1..3413b148 100644 --- a/backend/api/v1/modules/a76/audit_log/services/core.py +++ b/backend/api/v1/modules/a76/audit_log/services/core.py @@ -142,6 +142,10 @@ class AuditMapper: ("doda", "CREATE"): "ADD DODA", ("doda", "UPDATE"): "EDIT DODA", ("doda", "DELETE"): "DELETE DODA", + + ("company", "CREATE"): "ADD COMPANY", + ("company", "UPDATE"): "EDIT COMPANY", + ("company", "DELETE"): "DELETE COMPANY", } @staticmethod diff --git a/backend/api/v1/modules/a76/audit_log/services/service.py b/backend/api/v1/modules/a76/audit_log/services/service.py index 9fdf4a6b..7625241a 100644 --- a/backend/api/v1/modules/a76/audit_log/services/service.py +++ b/backend/api/v1/modules/a76/audit_log/services/service.py @@ -1,7 +1,9 @@ """ Audit Log Service """ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date, time +from decimal import Decimal +import uuid import pytz from typing import Optional, List, Dict, Any from sqlalchemy.orm import Session @@ -11,6 +13,29 @@ from core.security import verify_token # keep if needed or simpler just remove i # We don't need security import here anymore as context is passed explicitly or handled by events +def _make_json_safe(obj: Any) -> Any: + """Recursively convert non-JSON-serializable types to serializable equivalents.""" + if obj is None: + return None + if isinstance(obj, dict): + return {k: _make_json_safe(v) for k, v in obj.items()} + if isinstance(obj, (list, tuple)): + return [_make_json_safe(v) for v in obj] + if isinstance(obj, datetime): + return obj.isoformat() + if isinstance(obj, date): + return obj.isoformat() + if isinstance(obj, time): + return obj.isoformat() + if isinstance(obj, Decimal): + return float(obj) + if isinstance(obj, uuid.UUID): + return str(obj) + if isinstance(obj, bytes): + return obj.decode("utf-8", errors="replace") + return obj + + class AuditService: @staticmethod @@ -56,8 +81,8 @@ class AuditService: table_name=table_name, record_id=record_id, operation_type=operation_type, - old_values=old_values, - new_values=new_values, + old_values=_make_json_safe(old_values), + new_values=_make_json_safe(new_values), changed_fields=changed_fields, ip_address=ip_address, user_agent=user_agent, @@ -86,7 +111,8 @@ class AuditService: # Context ip_address: Optional[str] = None, user_agent: Optional[str] = None, - company_id: Optional[int] = None + company_id: Optional[int] = None, + tenant_id: Optional[int] = None ): """ High-level wrapper to log CRUD operations automatically mapping to Legacy format @@ -149,7 +175,8 @@ class AuditService: changed_fields=changed_fields, ip_address=ip_address, user_agent=user_agent, - company_id=company_id + company_id=company_id, + tenant_id=tenant_id ) @staticmethod diff --git a/backend/api/v1/modules/a76/audit_log/utils/__init__.py b/backend/api/v1/modules/a76/audit_log/utils/__init__.py new file mode 100644 index 00000000..57f53044 --- /dev/null +++ b/backend/api/v1/modules/a76/audit_log/utils/__init__.py @@ -0,0 +1,7 @@ +""" +Audit Log Utilities +""" + +from .serialization import serialize_for_json + +__all__ = ["serialize_for_json"] diff --git a/backend/api/v1/modules/a76/audit_log/utils/serialization.py b/backend/api/v1/modules/a76/audit_log/utils/serialization.py new file mode 100644 index 00000000..604de7b0 --- /dev/null +++ b/backend/api/v1/modules/a76/audit_log/utils/serialization.py @@ -0,0 +1,44 @@ +""" +Serialization utilities for audit logs +""" + +from datetime import date, datetime, time +from decimal import Decimal +from uuid import UUID +from typing import Any, Dict + + +def serialize_value(value: Any) -> Any: + """ + Convert a Python value to a JSON-serializable type + """ + if value is None: + return None + elif isinstance(value, (date, datetime)): + return value.isoformat() + elif isinstance(value, time): + return value.isoformat() + elif isinstance(value, Decimal): + return float(value) + elif isinstance(value, UUID): + return str(value) + elif isinstance(value, bytes): + return value.decode("utf-8", errors="replace") + elif isinstance(value, (list, tuple)): + return [serialize_value(item) for item in value] + elif isinstance(value, dict): + return {key: serialize_value(val) for key, val in value.items()} + else: + # For any other type, try to return as-is (str, int, float, bool, None) + # If it fails JSON serialization later, at least we tried + return value + + +def serialize_for_json(data: Dict[str, Any]) -> Dict[str, Any]: + """ + Recursively serialize a dictionary for JSON storage + """ + if not data: + return data + + return {key: serialize_value(value) for key, value in data.items()} diff --git a/backend/api/v1/modules/a76/classes/dto.py b/backend/api/v1/modules/a76/classes/dto.py index 00c141b4..68054f2a 100644 --- a/backend/api/v1/modules/a76/classes/dto.py +++ b/backend/api/v1/modules/a76/classes/dto.py @@ -223,6 +223,7 @@ class ClassWithFADataResponse(BaseModel): fa_class_id: Optional[int] = None depreciation_rate: Optional[Decimal] = None fda_code: Optional[str] = None + eccn_code: Optional[str] = None class_enabled: Optional[bool] = None model_config = ConfigDict(from_attributes=True) \ No newline at end of file diff --git a/backend/api/v1/modules/a76/classes/service.py b/backend/api/v1/modules/a76/classes/service.py index 1e3ba949..4decee1c 100644 --- a/backend/api/v1/modules/a76/classes/service.py +++ b/backend/api/v1/modules/a76/classes/service.py @@ -152,6 +152,7 @@ class ClassService: "fa_class_id": fa_class.id if fa_class else None, "depreciation_rate": fa_class.depreciation_rate if fa_class else None, "fda_code": fa_class.fda_code if fa_class else None, + "eccn_code": fa_class.eccn_code if fa_class else None, "class_enabled": fa_class.class_enabled if fa_class else None, } combined.append(class_dict) diff --git a/backend/api/v1/modules/a76/clients_and_providers/routes.py b/backend/api/v1/modules/a76/clients_and_providers/routes.py index b1857de0..6b31d570 100644 --- a/backend/api/v1/modules/a76/clients_and_providers/routes.py +++ b/backend/api/v1/modules/a76/clients_and_providers/routes.py @@ -7,7 +7,7 @@ from typing import List, Optional from core.database import get_core_db from core.security import get_current_user, validate_access_to_resource from fastapi import APIRouter, Depends, HTTPException, Query -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, joinedload from api.v1.common.tenant_crud_routes import TenantCRUDRoutes from .models import ClientOrProviderEnum @@ -40,7 +40,10 @@ async def get_clients_and_providers( """Get clients and providers""" tenant_id = validate_access_to_resource(db, company_id, current_user) - query = db.query(ClientProvider).filter( + query = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter( ClientProvider.tenant_id == tenant_id, ClientProvider.company_id == company_id, ) diff --git a/backend/api/v1/modules/a76/customs_brokers/dto.py b/backend/api/v1/modules/a76/customs_brokers/dto.py index 7f65b264..e7f38cba 100644 --- a/backend/api/v1/modules/a76/customs_brokers/dto.py +++ b/backend/api/v1/modules/a76/customs_brokers/dto.py @@ -43,6 +43,7 @@ class CustomsBrokerResponseDTO(CustomsBrokerBaseDTO): broker_key: str tenant_id: int company_id: int + vu: Optional["CustomsBrokerVUCreateDTO"] = None class Config: from_attributes = True @@ -75,25 +76,25 @@ class CustomsBrokerDTO(BaseModel): class CustomsBrokerVUCreateDTO(BaseModel): - certificate_path: Optional[str] - key_path: Optional[str] - access_key: Optional[str] - fiel_format: Optional[str] - signature_read_path: Optional[str] - archive_path: Optional[str] - fiel_access_key: Optional[str] - web_service_user: Optional[str] - web_service_access_key: Optional[str] - vu_email: Optional[str] - vu_figure_type: Optional[str] - xml_files_path: Optional[str] - query_tax_id: Optional[str] - doda_certificate_path: Optional[str] - doda_key_path: Optional[str] - doda_web_service_user: Optional[str] - doda_web_service_access_key: Optional[str] - doda_fiel_access_key: Optional[str] - doda_xml_files_path: Optional[str] + certificate_path: Optional[str] = None + key_path: Optional[str] = None + access_key: Optional[str] = None + fiel_format: Optional[str] = None + signature_read_path: Optional[str] = None + archive_path: Optional[str] = None + fiel_access_key: Optional[str] = None + web_service_user: Optional[str] = None + web_service_access_key: Optional[str] = None + vu_email: Optional[str] = None + vu_figure_type: Optional[str] = None + xml_files_path: Optional[str] = None + query_tax_id: Optional[str] = None + doda_certificate_path: Optional[str] = None + doda_key_path: Optional[str] = None + doda_web_service_user: Optional[str] = None + doda_web_service_access_key: Optional[str] = None + doda_fiel_access_key: Optional[str] = None + doda_xml_files_path: Optional[str] = None class Config: from_attributes = True @@ -102,15 +103,15 @@ class CustomsBrokerVUCreateDTO(BaseModel): class CustomsBrokerPersonnelDTO(BaseModel): broker_key: str = Field(..., max_length=5, pattern=r"^[a-zA-Z0-9]+$") line: int - name: Optional[str] - tax_id: Optional[str] - personal_id: Optional[str] - position: Optional[str] + name: Optional[str] = None + tax_id: Optional[str] = None + personal_id: Optional[str] = None + position: Optional[str] = None license: Optional[str] = Field(None, max_length=4, pattern=r"^\d*$") - first_name: Optional[str] - last_name: Optional[str] - middle_name: Optional[str] - email: Optional[str] + first_name: Optional[str] = None + last_name: Optional[str] = None + middle_name: Optional[str] = None + email: Optional[str] = None class Config: from_attributes = True diff --git a/backend/api/v1/modules/a76/customs_brokers/models.py b/backend/api/v1/modules/a76/customs_brokers/models.py index a5925a62..11c29580 100644 --- a/backend/api/v1/modules/a76/customs_brokers/models.py +++ b/backend/api/v1/modules/a76/customs_brokers/models.py @@ -32,7 +32,7 @@ class CustomsBroker(Base, TenantScopedMixin, TimestampMixin): contact = Column(String(80), nullable=True) vu = relationship( - "CustomsBrokerVU", back_populates="customs_broker", cascade="all, delete" + "CustomsBrokerVU", back_populates="customs_broker", cascade="all, delete", uselist=False ) personnel = relationship( "CustomsBrokerPersonnel", back_populates="customs_broker", cascade="all, delete" diff --git a/backend/api/v1/modules/a76/customs_brokers/services.py b/backend/api/v1/modules/a76/customs_brokers/services.py index ea72abe5..c1c10d68 100644 --- a/backend/api/v1/modules/a76/customs_brokers/services.py +++ b/backend/api/v1/modules/a76/customs_brokers/services.py @@ -76,7 +76,8 @@ class CustomsBrokerVUService: def get_by_broker_key(db: Session, broker_key: str): return ( db.query(models.CustomsBrokerVU) - .filter(models.CustomsBrokerVU.broker_key == broker_key) + .join(models.CustomsBroker) + .filter(models.CustomsBroker.broker_key == broker_key) .first() ) @@ -90,13 +91,28 @@ class CustomsBrokerVUService: @staticmethod def update_vu(db: Session, broker_key: str, vu_data: dto.CustomsBrokerVUCreateDTO): - vu = CustomsBrokerVUService.get_by_broker_key(db, broker_key) + # We need the custom broker ID to insert a new VU + broker = db.query(models.CustomsBroker).filter(models.CustomsBroker.broker_key == broker_key).first() + if not broker: + return None + + vu = db.query(models.CustomsBrokerVU).filter(models.CustomsBrokerVU.customs_broker_id == broker.id).first() + if vu: - for key, value in vu_data.dict(exclude_unset=True).items(): + # Update existing + for key, value in vu_data.model_dump(exclude_unset=True).items(): setattr(vu, key, value) db.commit() db.refresh(vu) - return vu + return vu + else: + # Create new + new_vu_data = vu_data.model_dump() + new_vu = models.CustomsBrokerVU(customs_broker_id=broker.id, **new_vu_data) + db.add(new_vu) + db.commit() + db.refresh(new_vu) + return new_vu @staticmethod def delete_vu(db: Session, broker_key: str): @@ -112,16 +128,22 @@ class CustomsBrokerPersonnelService: def get_by_broker_key_and_line(db: Session, broker_key: str, line: int): return ( db.query(models.CustomsBrokerPersonnel) + .join(models.CustomsBroker) .filter( - models.CustomsBrokerPersonnel.broker_key == broker_key, + models.CustomsBroker.broker_key == broker_key, models.CustomsBrokerPersonnel.line == line, ) .first() ) @staticmethod - def create_personnel(db: Session, personnel_data: dto.CustomsBrokerPersonnelDTO): - new_personnel = models.CustomsBrokerPersonnel(**personnel_data.dict()) + def create_personnel(db: Session, broker_key: str, personnel_data: dto.CustomsBrokerPersonnelDTO): + broker = db.query(models.CustomsBroker).filter(models.CustomsBroker.broker_key == broker_key).first() + if not broker: + return None + + new_personnel_data = personnel_data.model_dump() + new_personnel = models.CustomsBrokerPersonnel(customs_broker_id=broker.id, **new_personnel_data) db.add(new_personnel) db.commit() db.refresh(new_personnel) @@ -138,7 +160,7 @@ class CustomsBrokerPersonnelService: db, broker_key, line ) if personnel: - for key, value in personnel_data.dict(exclude_unset=True).items(): + for key, value in personnel_data.model_dump(exclude_unset=True).items(): setattr(personnel, key, value) db.commit() db.refresh(personnel) diff --git a/backend/api/v1/modules/a76/general_catalogs/company/dto.py b/backend/api/v1/modules/a76/general_catalogs/company/dto.py index 03f8c9ae..dff8a610 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/dto.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/dto.py @@ -85,88 +85,149 @@ class CompanyCreateDTO(BaseModel): ) seventh_amendment: Optional[bool] = Field(None, description="Seventh amendment") + # Sectors + sector1: Optional[str] = Field(None, max_length=150) + sector2: Optional[str] = Field(None, max_length=150) + sector3: Optional[str] = Field(None, max_length=5) + + # Certification (CompanyCertification flattened) + is_certified_company: Optional[str] = Field(None, max_length=1) + certified_company_registration: Optional[str] = Field(None, max_length=40) + certified_company_start_date: Optional[int] = None + certified_company_end_date: Optional[int] = None + annex31_certification_date: Optional[int] = None + annex31_certification_number: Optional[str] = Field(None, max_length=50) + annex31_modality: Optional[str] = Field(None, max_length=50) + annex31_company_type: Optional[str] = Field(None, max_length=50) + annex31_renewal_date: Optional[int] = None + annex31_final_certification_date: Optional[int] = None + is_oea_company: Optional[int] = None + neec_company: Optional[int] = None + + # Addresses (Flattened) + # Main + main_street: Optional[str] = Field(None, max_length=255) + main_exterior_number: Optional[str] = Field(None, max_length=10) + main_interior_number: Optional[str] = Field(None, max_length=10) + main_postal_code: Optional[str] = Field(None, max_length=5) + main_neighborhood: Optional[str] = Field(None, max_length=255) + main_city: Optional[str] = Field(None, max_length=255) + main_municipality: Optional[str] = Field(None, max_length=255) + main_state: Optional[str] = Field(None, max_length=255) + main_country: Optional[str] = Field(None, max_length=255) + main_phone: Optional[str] = Field(None, max_length=20) + main_fax: Optional[str] = Field(None, max_length=20) + main_email: Optional[str] = Field(None, max_length=255) + # Industrial 1 + ind1_street: Optional[str] = Field(None, max_length=255) + ind1_exterior_number: Optional[str] = Field(None, max_length=10) + ind1_interior_number: Optional[str] = Field(None, max_length=10) + ind1_postal_code: Optional[str] = Field(None, max_length=5) + ind1_neighborhood: Optional[str] = Field(None, max_length=255) + ind1_city: Optional[str] = Field(None, max_length=255) + ind1_municipality: Optional[str] = Field(None, max_length=255) + ind1_state: Optional[str] = Field(None, max_length=255) + ind1_country: Optional[str] = Field(None, max_length=255) + ind1_phone: Optional[str] = Field(None, max_length=20) + ind1_fax: Optional[str] = Field(None, max_length=20) + ind1_email: Optional[str] = Field(None, max_length=255) + # Industrial 2 + ind2_street: Optional[str] = Field(None, max_length=255) + ind2_exterior_number: Optional[str] = Field(None, max_length=10) + ind2_interior_number: Optional[str] = Field(None, max_length=10) + ind2_postal_code: Optional[str] = Field(None, max_length=5) + ind2_neighborhood: Optional[str] = Field(None, max_length=255) + ind2_city: Optional[str] = Field(None, max_length=255) + ind2_municipality: Optional[str] = Field(None, max_length=255) + ind2_state: Optional[str] = Field(None, max_length=255) + ind2_country: Optional[str] = Field(None, max_length=255) + ind2_phone: Optional[str] = Field(None, max_length=20) + ind2_fax: Optional[str] = Field(None, max_length=20) + ind2_email: Optional[str] = Field(None, max_length=255) + + # Technical flags + active_labels: Optional[int] = None + active_fractions: Optional[int] = None + activate_caat: Optional[int] = None + trans_interface: Optional[int] = None + american_costs: Optional[int] = None + scaf_readonly: Optional[int] = None + parts_replacement: Optional[int] = None + activate_facmexame: Optional[int] = None + part_reference: Optional[int] = None + international_firm: Optional[int] = None + + # Advanced Config + ftp_key: Optional[str] = Field(None, max_length=10) + sifra_path: Optional[str] = Field(None, max_length=255) + version_type: Optional[str] = Field(None, max_length=20) + sql_language: Optional[str] = Field(None, max_length=19) + balance_operation_mode: Optional[str] = Field(None, max_length=50) + + # Prevalidator (detailed) + prev_customs: Optional[str] = Field(None, max_length=20) + prev_key: Optional[str] = Field(None, max_length=20) + prev_patent: Optional[str] = Field(None, max_length=4) + prev_description: Optional[str] = Field(None, max_length=100) + + # Ventanilla Única (VU) + vu_webservice_user: Optional[str] = Field(None, max_length=100) + vu_webservice_password: Optional[str] = Field(None, max_length=100) + vu_email: Optional[str] = Field(None, max_length=800) + vu_figure_type: Optional[str] = Field(None, max_length=29) + vu_central_path: Optional[str] = Field(None, max_length=1499) + vu_xml_files_path: Optional[str] = Field(None, max_length=1499) + vu_query_rfc: Optional[str] = Field(None, max_length=30) + vu_validation_rfc: Optional[str] = Field(None, max_length=30) + vu_configuration_source: Optional[str] = Field(None, max_length=30) + vu_measurement_units: Optional[str] = Field(None, max_length=3) + + # Electronic Agent + ea_input_folder: Optional[str] = Field(None, max_length=1000) + ea_output_folder: Optional[str] = Field(None, max_length=1000) + ea_send_mask: Optional[str] = Field(None, max_length=20) + ea_response_mask: Optional[str] = Field(None, max_length=20) + ea_response_extension: Optional[str] = Field(None, max_length=20) + ea_counter_start: Optional[int] = None + ea_counter_end: Optional[int] = None + ea_counter_next: Optional[int] = None + + # CFDI + cfdi_xml_save_path: Optional[str] = Field(None, max_length=5000) + cfdi_app_path: Optional[str] = Field(None, max_length=5000) + cfdi_pac_app_path: Optional[str] = Field(None, max_length=5000) + + # Digital Certificates (CompanyDigitalCertificate flattened) + # FIEL + fiel_cer: Optional[str] = Field(None, max_length=5000) + fiel_key: Optional[str] = Field(None, max_length=5000) + fiel_pass: Optional[str] = Field(None, max_length=200) + fiel_access: Optional[str] = Field(None, max_length=50) + fiel_cer_exp: Optional[int] = None + fiel_key_exp: Optional[int] = None + # CFDI (Sello) + cfdi_cert_cer: Optional[str] = Field(None, max_length=5000) + cfdi_cert_key: Optional[str] = Field(None, max_length=5000) + cfdi_cert_pass: Optional[str] = Field(None, max_length=200) + cfdi_cert_access: Optional[str] = Field(None, max_length=50) + cfdi_cert_cer_exp: Optional[int] = None + cfdi_cert_key_exp: Optional[int] = None + # Cancellation + cancel_cer: Optional[str] = Field(None, max_length=5000) + cancel_key: Optional[str] = Field(None, max_length=5000) + cancel_pass: Optional[str] = Field(None, max_length=200) + cancel_access: Optional[str] = Field(None, max_length=50) + cancel_cer_exp: Optional[int] = None + cancel_key_exp: Optional[int] = None + + class Config: from_attributes = True -class CompanyUpdateDTO(BaseModel): +class CompanyUpdateDTO(CompanyCreateDTO): """DTO para actualizar una empresa""" - - name: Optional[str] = Field(None, max_length=255, description="Company name") - rfc: Optional[str] = Field(None, max_length=30, description="Company RFC") - main_activity: Optional[str] = Field( - None, max_length=255, description="Main activity" - ) - - # Program information - program: Optional[str] = Field(None, max_length=10, description="Program") - program_number: Optional[str] = Field( - None, max_length=40, description="Program number" - ) - prosec: Optional[int] = Field(None, description="PROSEC") - prosec_authorization: Optional[str] = Field( - None, max_length=20, description="PROSEC authorization" - ) - - # Identifiers - manufacturer_id: Optional[str] = Field( - None, max_length=25, description="Manufacturer ID" - ) - broker_company: Optional[str] = Field( - None, max_length=10, description="Broker company" - ) - - # Responsible person - responsible: Optional[str] = Field( - None, max_length=80, description="Responsible person" - ) - responsible_name: Optional[str] = Field( - None, max_length=20, description="Responsible first name" - ) - responsible_last_name: Optional[str] = Field( - None, max_length=20, description="Responsible last name" - ) - responsible_mother_last_name: Optional[str] = Field( - None, max_length=20, description="Responsible mother's last name" - ) - responsible_rfc: Optional[str] = Field( - None, max_length=30, description="Responsible RFC" - ) - position: Optional[str] = Field( - None, max_length=30, description="Responsible position" - ) - - # Configuration - logo: Optional[str] = Field(None, max_length=255, description="Company logo") - has_express_line: Optional[bool] = Field(None, description="Has express line") - order_format_type: Optional[str] = Field( - None, max_length=19, description="Order format type" - ) - previous_code: Optional[int] = Field(None, description="Previous code") - is_service_company: Optional[bool] = Field(None, description="Is service company") - - # Client and subassembly - client_name: Optional[str] = Field(None, max_length=300, description="Client name") - subassembly_mode: Optional[str] = Field( - None, max_length=7, description="Subassembly mode" - ) - - # Additional information - curp: Optional[str] = Field(None, max_length=19, description="CURP") - inter_db_name: Optional[str] = Field( - None, max_length=100, description="Inter DB name" - ) - ctpat_svi: Optional[str] = Field(None, max_length=100, description="CTPAT SVI") - trusted_exporter_number: Optional[str] = Field( - None, max_length=50, description="Trusted exporter number" - ) - prevalidator_key: Optional[str] = Field( - None, max_length=20, description="Prevalidator key" - ) - seventh_amendment: Optional[bool] = Field(None, description="Seventh amendment") - - class Config: - from_attributes = True + pass class CompanyResponseDTO(BaseModel): @@ -219,5 +280,142 @@ class CompanyResponseDTO(BaseModel): created_at: datetime updated_at: Optional[datetime] = None + # --- Flattened Fields for Response --- + # Sectores + sector1: Optional[str] = None + sector2: Optional[str] = None + sector3: Optional[str] = None + + # Certification + is_certified_company: Optional[str] = None + certified_company_registration: Optional[str] = None + certified_company_start_date: Optional[int] = None + certified_company_end_date: Optional[int] = None + annex31_certification_date: Optional[int] = None + annex31_certification_number: Optional[str] = None + annex31_modality: Optional[str] = None + annex31_company_type: Optional[str] = None + annex31_renewal_date: Optional[int] = None + annex31_final_certification_date: Optional[int] = None + is_oea_company: Optional[int] = None + neec_company: Optional[int] = None + + # Addresses + # ... (Main, Ind1, Ind2 can be added here if needed for flattened response) + main_street: Optional[str] = None + main_exterior_number: Optional[str] = None + main_interior_number: Optional[str] = None + main_postal_code: Optional[str] = None + main_neighborhood: Optional[str] = None + main_city: Optional[str] = None + main_municipality: Optional[str] = None + main_state: Optional[str] = None + main_country: Optional[str] = None + main_phone: Optional[str] = None + main_fax: Optional[str] = None + main_email: Optional[str] = None + + ind1_street: Optional[str] = None + ind1_exterior_number: Optional[str] = None + ind1_interior_number: Optional[str] = None + ind1_postal_code: Optional[str] = None + ind1_neighborhood: Optional[str] = None + ind1_city: Optional[str] = None + ind1_municipality: Optional[str] = None + ind1_state: Optional[str] = None + ind1_country: Optional[str] = None + ind1_phone: Optional[str] = None + ind1_fax: Optional[str] = None + ind1_email: Optional[str] = None + + ind2_street: Optional[str] = None + ind2_exterior_number: Optional[str] = None + ind2_interior_number: Optional[str] = None + ind2_postal_code: Optional[str] = None + ind2_neighborhood: Optional[str] = None + ind2_city: Optional[str] = None + ind2_municipality: Optional[str] = None + ind2_state: Optional[str] = None + ind2_country: Optional[str] = None + ind2_phone: Optional[str] = None + ind2_fax: Optional[str] = None + ind2_email: Optional[str] = None + + # Technical flags + active_labels: Optional[int] = None + active_fractions: Optional[int] = None + activate_caat: Optional[int] = None + trans_interface: Optional[int] = None + american_costs: Optional[int] = None + scaf_readonly: Optional[int] = None + parts_replacement: Optional[int] = None + activate_facmexame: Optional[int] = None + part_reference: Optional[int] = None + international_firm: Optional[int] = None + + # Advanced Config + ftp_key: Optional[str] = None + sifra_path: Optional[str] = None + version_type: Optional[str] = None + sql_language: Optional[str] = None + balance_operation_mode: Optional[str] = None + + # Prevalidator + prev_customs: Optional[str] = None + prev_key: Optional[str] = None + prev_patent: Optional[str] = None + prev_description: Optional[str] = None + + # VU + vu_webservice_user: Optional[str] = None + vu_webservice_password: Optional[str] = None + vu_email: Optional[str] = None + vu_figure_type: Optional[str] = None + vu_central_path: Optional[str] = None + vu_xml_files_path: Optional[str] = None + vu_query_rfc: Optional[str] = None + vu_validation_rfc: Optional[str] = None + vu_configuration_source: Optional[str] = None + vu_measurement_units: Optional[str] = None + + # Electronic Agent + ea_input_folder: Optional[str] = None + ea_output_folder: Optional[str] = None + ea_send_mask: Optional[str] = None + ea_response_mask: Optional[str] = None + ea_response_extension: Optional[str] = None + ea_counter_start: Optional[int] = None + ea_counter_end: Optional[int] = None + ea_counter_next: Optional[int] = None + + # CFDI + cfdi_xml_save_path: Optional[str] = None + cfdi_app_path: Optional[str] = None + cfdi_pac_app_path: Optional[str] = None + + # Digital Certificates (Flattened) + fiel_cer: Optional[str] = None + fiel_key: Optional[str] = None + fiel_pass: Optional[str] = None + fiel_access: Optional[str] = None + fiel_cer_exp: Optional[int] = None + fiel_key_exp: Optional[int] = None + + cfdi_cert_cer: Optional[str] = None + cfdi_cert_key: Optional[str] = None + cfdi_cert_pass: Optional[str] = None + cfdi_cert_access: Optional[str] = None + cfdi_cert_cer_exp: Optional[int] = None + cfdi_cert_key_exp: Optional[int] = None + + cancel_cer: Optional[str] = None + cancel_key: Optional[str] = None + cancel_pass: Optional[str] = None + cancel_access: Optional[str] = None + cancel_cer_exp: Optional[int] = None + cancel_key_exp: Optional[int] = None + + + class Config: from_attributes = True diff --git a/backend/api/v1/modules/a76/general_catalogs/company/routes.py b/backend/api/v1/modules/a76/general_catalogs/company/routes.py index e6d4bc52..5dff4d54 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/routes.py @@ -341,3 +341,101 @@ async def upload_company_logo( "logo_path": file_path, "company_id": company_id, } + + +@router.post( + "/{company_id}/upload-certificate", + response_model=dict, + summary="Upload company certificate", +) +async def upload_company_certificate( + company_id: int, + certificate_type: str, + file: UploadFile = File(...), + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user), +): + """ + Upload a certificate for a company + certificate_type: fiel_cer, fiel_key, cfdi_cert_cer, cfdi_cert_key, cancel_cer, cancel_key + """ + tenant_id = current_user.get("tenant_id") + if not tenant_id: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Tenant ID not found in user data", + ) + + # Validar que la empresa existe + service = CompanyService(db) + company = service.get_by_id(db, company_id, tenant_id, 0) + if not company: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Company not found", + ) + + # Validar tipo de certificado + valid_types = [ + "fiel_cer", "fiel_key", + "cfdi_cert_cer", "cfdi_cert_key", + "cancel_cer", "cancel_key" + ] + if certificate_type not in valid_types: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Invalid certificate type. Allowed: {', '.join(valid_types)}", + ) + + # Validar extensión + file_ext = os.path.splitext(file.filename)[1].lower() + allowed_exts = {".cer", ".key"} + if file_ext not in allowed_exts: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"File type not allowed. Allowed: {', '.join(allowed_exts)}", + ) + + # Validar correspondencia extensión vs tipo (simple check) + if "cer" in certificate_type and file_ext != ".cer": + raise HTTPException(status_code=400, detail="For this certificate type, file must be .cer") + if "key" in certificate_type and file_ext != ".key": + raise HTTPException(status_code=400, detail="For this certificate type, file must be .key") + + # Validar tamaño + content = await file.read() + if len(content) > MAX_FILE_SIZE: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"File too large. Maximum size: {MAX_FILE_SIZE / 1024 / 1024}MB", + ) + + # Crear directorio si no existe + certs_dir = os.path.join(UPLOAD_DIR, str(company_id), "certificates") + os.makedirs(certs_dir, exist_ok=True) + + # Generar nombre único + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = f"{certificate_type}_{timestamp}{file_ext}" + file_path = os.path.join(certs_dir, filename) + + # Guardar archivo + try: + await file.seek(0) + with open(file_path, "wb") as buffer: + shutil.copyfileobj(file.file, buffer) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error saving file: {str(e)}", + ) + + # Actualizar la base de datos + service.upload_certificate(company_id, certificate_type, file_path, tenant_id) + + return { + "message": "Certificate uploaded successfully", + "file_path": file_path, + "certificate_type": certificate_type, + "company_id": company_id, + } diff --git a/backend/api/v1/modules/a76/general_catalogs/company/service.py b/backend/api/v1/modules/a76/general_catalogs/company/service.py index 3f16f72b..06b85f7d 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/service.py @@ -11,6 +11,8 @@ from sqlalchemy.orm import Session from .dto import CompanyCreateDTO, CompanyResponseDTO, CompanyUpdateDTO from .models import Company +from ...audit_log.services.service import AuditService +from core.context import get_user_context logger = logging.getLogger(__name__) @@ -111,7 +113,8 @@ class CompanyService: "active_labels", "active_fractions", "activate_caat", "trans_interface", "american_costs", "scaf_readonly", "parts_replacement", "activate_facmexame", "part_reference", "international_firm", "ftp_key", "sifra_path", - "version_type", "sql_language", "balance_operation_mode", "inter_db_name" + "version_type", "sql_language", "balance_operation_mode", "inter_db_name", + "seventh_amendment" ] return {k: v for k, v in data.items() if k in company_fields} @@ -127,15 +130,100 @@ class CompanyService: ] return {k: v for k, v in data.items() if k in cert_fields} + def _extract_address_fields(self, data: Dict[str, Any], type_prefix: str) -> Dict[str, Any]: + """Extrae campos de dirección con base en un prefijo (main_, ind1_, ind2_)""" + fields = ["street", "exterior_number", "interior_number", "postal_code", + "neighborhood", "city", "municipality", "state", "country", + "phone", "fax", "email"] + + extracted = {} + for f in fields: + key = f"{type_prefix}_{f}" + if key in data: + extracted[f] = data[key] + return extracted + def _extract_prevalidator_fields(self, data: Dict[str, Any]) -> Dict[str, Any]: """Extrae campos que pertenecen a CompanyPrevalidator""" - # Note: 'prevalidator_key' in DTO maps to 'key' in model - fields = {} - if "prevalidator_key" in data: - fields["key"] = data["prevalidator_key"] + # Se mapean campos 'prev_*' a los nombres del modelo + mapping = { + "prev_customs": "customs", + "prev_key": "key", + "prev_patent": "patent", + "prev_description": "description" + } + extracted = {} + for dto_key, model_key in mapping.items(): + if dto_key in data: + extracted[model_key] = data[dto_key] - # Add other fields if present in DTO in the future - return fields + # Retrocompatibilidad con el campo prevalidator_key que ya estaba en el DTO + if "prevalidator_key" in data and "key" not in extracted: + extracted["key"] = data["prevalidator_key"] + + return extracted + + def _extract_vu_fields(self, data: Dict[str, Any]) -> Dict[str, Any]: + """Extrae campos que pertenecen a CompanyVU (prefijo vu_)""" + vu_fields = [ + "webservice_user", "webservice_password", "email", "figure_type", + "central_path", "xml_files_path", "query_rfc", "validation_rfc", + "configuration_source", "measurement_units" + ] + extracted = {} + for f in vu_fields: + key = f"vu_{f}" + if key in data: + extracted[f] = data[key] + return extracted + + def _extract_electronic_agent_fields(self, data: Dict[str, Any]) -> Dict[str, Any]: + """Extrae campos que pertenecen a CompanyElectronicAgent (prefijo ea_)""" + ea_fields = [ + "input_folder", "output_folder", "send_mask", "response_mask", + "response_extension", "counter_start", "counter_end", "counter_next" + ] + extracted = {} + for f in ea_fields: + key = f"ea_{f}" + if key in data: + extracted[f] = data[key] + return extracted + + def _extract_cfdi_fields(self, data: Dict[str, Any]) -> Dict[str, Any]: + """Extrae campos que pertenecen a CompanyCFDI (prefijo cfdi_)""" + cfdi_fields = ["xml_save_path", "cfdi_app_path", "pac_app_path"] + extracted = {} + for f in cfdi_fields: + key = f"cfdi_{f}" + if key in data: + extracted[f] = data[key] + return extracted + + def _extract_digital_certificate_fields(self, data: Dict[str, Any], cert_prefix: str) -> Dict[str, Any]: + """Extrae campos para un tipo específico de certificado (fiel, cfdi_cert, cancel)""" + # Mapeo de prefijos DTO a nombres de modelo + fields_map = { + f"{cert_prefix}_cer": "cer_file_path", + f"{cert_prefix}_key": "key_file_path", + f"{cert_prefix}_pass": "password", + f"{cert_prefix}_access": "access_key", + f"{cert_prefix}_cer_exp": "cer_expiration_date", + f"{cert_prefix}_key_exp": "key_expiration_date" + } + + extracted = {} + for dto_key, model_key in fields_map.items(): + if dto_key in data: + extracted[model_key] = data[dto_key] + + if extracted: + # Mapear prefijo al tipo real en base de datos + model_type_map = {'fiel': 'fiel', 'cfdi_cert': 'cfdi', 'cancel': 'cancellation'} + extracted['certificate_type'] = model_type_map.get(cert_prefix, cert_prefix) + + return extracted + def flatten_company_dto(self, company: Company) -> Dict[str, Any]: """Flattens Company and its submodels into a single dict for DTO validation""" @@ -144,10 +232,7 @@ class CompanyService: k: getattr(company, k) for k in company.__mapper__.c.keys() } - # Explicitly ensure logo is present (defensive programming) - if hasattr(company, 'logo'): - result['logo'] = company.logo - + # 2. Certification fields if company.certification: cert_fields = [ @@ -163,86 +248,215 @@ class CompanyService: if val is not None: result[field] = val - # 3. Prevalidator fields + # 3. Addresses + for addr in company.addresses: + prefix = "" + if addr.address_type == 'main': prefix = "main_" + elif addr.address_type == 'industrial': prefix = "ind1_" + elif addr.address_type == 'industrial2': prefix = "ind2_" + + if prefix: + addr_fields = ["street", "exterior_number", "interior_number", "postal_code", + "neighborhood", "city", "municipality", "state", "country", + "phone", "fax", "email"] + for f in addr_fields: + val = getattr(addr, f, None) + if val is not None: + result[f"{prefix}{f}"] = val + + # 4. Prevalidator fields if company.prevalidator: + mapping = {"customs": "prev_customs", "key": "prev_key", + "patent": "prev_patent", "description": "prev_description"} + for model_f, dto_f in mapping.items(): + val = getattr(company.prevalidator, model_f, None) + if val is not None: + result[dto_f] = val + # Retrocompatibilidad if company.prevalidator.key: result["prevalidator_key"] = company.prevalidator.key + + # 5. VU fields + if company.ventanilla_unica: + f_list = ["webservice_user", "webservice_password", "email", "figure_type", + "central_path", "xml_files_path", "query_rfc", "validation_rfc", + "configuration_source", "measurement_units"] + for f in f_list: + val = getattr(company.ventanilla_unica, f, None) + if val is not None: + result[f"vu_{f}"] = val + + # 6. Electronic Agent fields + if company.electronic_agent: + f_list = ["input_folder", "output_folder", "send_mask", "response_mask", + "response_extension", "counter_start", "counter_end", "counter_next"] + for f in f_list: + val = getattr(company.electronic_agent, f, None) + if val is not None: + result[f"ea_{f}"] = val + + # 7. CFDI fields + if company.cfdi: + f_list = ["xml_save_path", "cfdi_app_path", "pac_app_path"] + for f in f_list: + val = getattr(company.cfdi, f, None) + if val is not None: + result[f"cfdi_{f}"] = val + + # 8. Digital Certificates + cert_type_map = {'fiel': 'fiel', 'cfdi': 'cfdi_cert', 'cancellation': 'cancel'} + for dc in company.digital_certificates: + prefix = cert_type_map.get(dc.certificate_type) + if prefix: + result[f"{prefix}_cer"] = dc.cer_file_path + result[f"{prefix}_key"] = dc.key_file_path + result[f"{prefix}_pass"] = dc.password + result[f"{prefix}_access"] = dc.access_key + result[f"{prefix}_cer_exp"] = dc.cer_expiration_date + result[f"{prefix}_key_exp"] = dc.key_expiration_date return result + # ==================== CRUD METHODS ==================== - def create_company_manually(self, data: CompanyCreateDTO, tenant_id: int) -> Company: + def create_company_manually(self, data: CompanyCreateDTO, tenant_id: int, username: str = "System") -> Company: from .submodels.certification import CompanyCertification from .submodels.prevalidator import CompanyPrevalidator + from .submodels.address import CompanyAddress + from .submodels.vu import CompanyVU + from .submodels.electronic_agent import CompanyElectronicAgent + from .submodels.cfdi import CompanyCFDI try: # 1. Preparar datos obj_data = data.model_dump(exclude_unset=True) - # 2. Extract fields for each model + # 2. Extract fields company_data = self._extract_company_fields(obj_data) cert_data = self._extract_certification_fields(obj_data) preval_data = self._extract_prevalidator_fields(obj_data) + vu_data = self._extract_vu_fields(obj_data) + ea_data = self._extract_electronic_agent_fields(obj_data) + cfdi_data = self._extract_cfdi_fields(obj_data) + + addr_main = self._extract_address_fields(obj_data, "main") + addr_ind1 = self._extract_address_fields(obj_data, "ind1") + addr_ind2 = self._extract_address_fields(obj_data, "ind2") + + fiel_data = self._extract_digital_certificate_fields(obj_data, "fiel") + cfdi_cert_data = self._extract_digital_certificate_fields(obj_data, "cfdi_cert") + cancel_cert_data = self._extract_digital_certificate_fields(obj_data, "cancel") + # 3. Create Company db_company = Company(**company_data, tenant_id=tenant_id) self.db.add(db_company) self.db.flush() # Generate ID - # 4. Create Certification if data exists + # 4. Create submodels if cert_data: - cert = CompanyCertification(**cert_data, company_id=db_company.id) - self.db.add(cert) - - # 5. Create Prevalidator if data exists + self.db.add(CompanyCertification(**cert_data, company_id=db_company.id)) if preval_data: - preval = CompanyPrevalidator(**preval_data, company_id=db_company.id) - self.db.add(preval) + self.db.add(CompanyPrevalidator(**preval_data, company_id=db_company.id)) + if vu_data: + self.db.add(CompanyVU(**vu_data, company_id=db_company.id)) + if ea_data: + self.db.add(CompanyElectronicAgent(**ea_data, company_id=db_company.id)) + if cfdi_data: + self.db.add(CompanyCFDI(**cfdi_data, company_id=db_company.id)) + + # 5. Create Digital Certificates + from .submodels.digital_certificate import CompanyDigitalCertificate + for dc_data in [fiel_data, cfdi_cert_data, cancel_cert_data]: + if dc_data: + self.db.add(CompanyDigitalCertificate(**dc_data, company_id=db_company.id)) + + # 6. Create Addresses - # 6. Commit + if addr_main: + self.db.add(CompanyAddress(**addr_main, address_type='main', company_id=db_company.id)) + if addr_ind1: + self.db.add(CompanyAddress(**addr_ind1, address_type='industrial', company_id=db_company.id)) + if addr_ind2: + self.db.add(CompanyAddress(**addr_ind2, address_type='industrial2', company_id=db_company.id)) + + # 7. Commit self.db.commit() + self.db.refresh(db_company) + # --- Audit Log --- + try: + # Si no se pasó un username explícito, intentar obtenerlo del contexto + if username == "System": + ctx = get_user_context() + if ctx: + username = ctx.get("preferred_username") or ctx.get("email") or "System" + + # Preparamos la data para el log (aplanada) + log_data = self.flatten_company_dto(db_company) + + AuditService.log_crud_operation( + db=self.db, + table_name="company", + operation_type="CREATE", + record_data=log_data, + username=username, + record_id=str(db_company.id), + company_id=db_company.id, + tenant_id=tenant_id + ) + except Exception as e: + logger.error(f"Error creating audit log for company creation: {e}") + # ----------------- + return db_company except IntegrityError as e: self.db.rollback() logger.error(f"IntegrityError creating company manually: {str(e)}") - raise HTTPException( - status_code=400, - detail="Error de integridad: Es posible que esta empresa ya exista.", - ) + raise HTTPException(status_code=400, detail="Error de integridad: Es posible que esta empresa ya exista.") except Exception as e: self.db.rollback() logger.error(f"Error creating company manually: {str(e)}") raise HTTPException(status_code=500, detail=f"Error creando empresa: {str(e)}") def update( - self, # Changed to instance method to use self helper methods + self, db: Session, company_id: int, tenant_id: int, company_id_unused: int, company_data: CompanyUpdateDTO, + username: str = "System", ) -> Optional[Company]: """Update a company""" from .submodels.certification import CompanyCertification from .submodels.prevalidator import CompanyPrevalidator + from .submodels.address import CompanyAddress + from .submodels.vu import CompanyVU + from .submodels.electronic_agent import CompanyElectronicAgent + from .submodels.cfdi import CompanyCFDI - # Use self.db if db is passed as None, or use passed db (legacy support) session = db if db else self.db - company = self.get_by_id(session, company_id, tenant_id, company_id_unused) - if not company: - return None + if not company: return None + + # --- Audit Log Prep --- + old_values = {} + try: + # Capturamos estado actual para comparar + # Usamos flatten_company_dto para tener una representación completa + old_values = self.flatten_company_dto(company) + except Exception as e: + logger.error(f"Error prepping audit log (old values): {e}") + # ---------------------- - # Update only provided fields update_data = company_data.model_dump(exclude_unset=True) # 1. Update Company fields company_fields = self._extract_company_fields(update_data) - for field, value in company_fields.items(): setattr(company, field, value) @@ -250,26 +464,98 @@ class CompanyService: cert_fields = self._extract_certification_fields(update_data) if cert_fields: if company.certification: - for field, value in cert_fields.items(): - setattr(company.certification, field, value) + for field, value in cert_fields.items(): setattr(company.certification, field, value) else: - new_cert = CompanyCertification(**cert_fields, company_id=company.id) - session.add(new_cert) + session.add(CompanyCertification(**cert_fields, company_id=company.id)) # 3. Update Prevalidator preval_fields = self._extract_prevalidator_fields(update_data) if preval_fields: if company.prevalidator: - for field, value in preval_fields.items(): - setattr(company.prevalidator, field, value) + for field, value in preval_fields.items(): setattr(company.prevalidator, field, value) else: - new_preval = CompanyPrevalidator(**preval_fields, company_id=company.id) - session.add(new_preval) + session.add(CompanyPrevalidator(**preval_fields, company_id=company.id)) + + # 4. Update VU + vu_fields = self._extract_vu_fields(update_data) + if vu_fields: + if company.ventanilla_unica: + for field, value in vu_fields.items(): setattr(company.ventanilla_unica, field, value) + else: + session.add(CompanyVU(**vu_fields, company_id=company.id)) + + # 5. Update Electronic Agent + ea_fields = self._extract_electronic_agent_fields(update_data) + if ea_fields: + if company.electronic_agent: + for field, value in ea_fields.items(): setattr(company.electronic_agent, field, value) + else: + session.add(CompanyElectronicAgent(**ea_fields, company_id=company.id)) + + # 6. Update CFDI + cfdi_fields = self._extract_cfdi_fields(update_data) + if cfdi_fields: + if company.cfdi: + for field, value in cfdi_fields.items(): setattr(company.cfdi, field, value) + else: + session.add(CompanyCFDI(**cfdi_fields, company_id=company.id)) + + # 7. Update Digital Certificates + from .submodels.digital_certificate import CompanyDigitalCertificate + for p in ["fiel", "cfdi_cert", "cancel"]: + dc_data = self._extract_digital_certificate_fields(update_data, p) + if dc_data: + m_type = dc_data['certificate_type'] + target = next((c for c in company.digital_certificates if c.certificate_type == m_type), None) + if target: + for field, value in dc_data.items(): setattr(target, field, value) + else: + session.add(CompanyDigitalCertificate(**dc_data, company_id=company.id)) + + # 8. Update Addresses + + for prefix, addr_type in [("main", "main"), ("ind1", "industrial"), ("ind2", "industrial2")]: + addr_data = self._extract_address_fields(update_data, prefix) + if addr_data: + # Buscar dirección existente de ese tipo + target_addr = next((a for a in company.addresses if a.address_type == addr_type), None) + if target_addr: + for field, value in addr_data.items(): setattr(target_addr, field, value) + else: + session.add(CompanyAddress(**addr_data, address_type=addr_type, company_id=company.id)) try: session.commit() session.refresh(company) + + # --- Audit Log --- + try: + # Si no se pasó un username explícito, intentar obtenerlo del contexto + if username == "System": + ctx = get_user_context() + if ctx: + username = ctx.get("preferred_username") or ctx.get("email") or "System" + + new_values = self.flatten_company_dto(company) + + AuditService.log_crud_operation( + db=session, + table_name="company", + operation_type="UPDATE", + record_data=new_values, # Data más reciente + username=username, + record_id=str(company.id), + old_values=old_values, + new_values=new_values, + company_id=company.id, + tenant_id=tenant_id + ) + except Exception as e: + logger.error(f"Error creating audit log for company update: {e}") + # ----------------- + return company + except Exception as e: session.rollback() logger.error(f"Error updating company {company_id}: {str(e)}") @@ -277,69 +563,140 @@ class CompanyService: @staticmethod def delete( - db: Session, company_id: int, tenant_id: int, company_id_unused: int + db: Session, company_id: int, tenant_id: int, company_id_unused: int, username: str = "System" ) -> bool: """Delete a company""" company = CompanyService.get_by_id(db, company_id, tenant_id, company_id_unused) if not company: return False + # --- Audit Log Prep --- + record_data = {} try: - # Manual cascade delete for submodels to ensure order and avoid FK issues - # (Even though cascade="all, delete-orphan" is set, manual deletion is safer for strict DBs) - - # 1. Delete Certification - if company.certification: - db.delete(company.certification) - - # 2. Delete Prevalidator - if company.prevalidator: - db.delete(company.prevalidator) - - # 3. Delete Electronic Agent - if company.electronic_agent: - db.delete(company.electronic_agent) - - # 4. Delete VU - if company.ventanilla_unica: - db.delete(company.ventanilla_unica) - - # 5. Delete CFDI - if company.cfdi: - db.delete(company.cfdi) - - # 6. Delete Digital Certificates - for cert in company.digital_certificates: - db.delete(cert) - - # 7. Delete Addresses - for addr in company.addresses: - db.delete(addr) + service = CompanyService(db) # Instancia para usar métodos de instancia si fuera necesario, o usar estático si flatten lo fuera + # flatten_company_dto es método de instancia en la definición actual, pero se está llamando aquí + # Deberíamos instanciar el servicio o mover flatten a estático. + # Como flatten usa self solo para acceder a nada realmente del estado, podría ser estático, + # pero para no romper, instanciamos. + record_data = service.flatten_company_dto(company) + except Exception: + pass + # ---------------------- + + try: + # Cascading deletes are handled by relationship settings, but manual is safer here + if company.certification: db.delete(company.certification) + if company.prevalidator: db.delete(company.prevalidator) + if company.electronic_agent: db.delete(company.electronic_agent) + if company.ventanilla_unica: db.delete(company.ventanilla_unica) + if company.cfdi: db.delete(company.cfdi) + for cert in company.digital_certificates: db.delete(cert) + for addr in company.addresses: db.delete(addr) - # Flush to execute submodel deletions first db.flush() - db.delete(company) db.commit() + + # --- Audit Log --- + try: + # Context check + if username == "System": + ctx = get_user_context() + if ctx: + username = ctx.get("preferred_username") or ctx.get("email") or "System" + + AuditService.log_crud_operation( + db=db, + table_name="company", + operation_type="DELETE", + record_data=record_data, + username=username, + record_id=str(company_id), + company_id=company_id, + tenant_id=tenant_id + ) + except Exception as e: + logger.error(f"Error creating audit log for company delete: {e}") + # ----------------- + return True except IntegrityError as e: db.rollback() logger.error(f"IntegrityError deleting company {company_id}: {str(e)}") - # Try to get detailed error from psycopg2 - detail = "No se puede eliminar la empresa porque tiene registros relacionados." - if hasattr(e, 'orig') and hasattr(e.orig, 'diag'): - if e.orig.diag.message_detail: - detail += f" Detalles: {e.orig.diag.message_detail}" - - raise HTTPException( - status_code=400, - detail=detail - ) + raise HTTPException(status_code=400, detail="No se puede eliminar la empresa porque tiene registros relacionados.") except Exception as e: db.rollback() logger.error(f"Error deleting company {company_id}: {str(e)}") raise HTTPException(status_code=500, detail="Error al eliminar la empresa") + def upload_certificate( + self, + company_id: int, + certificate_type: str, + file_path: str, + tenant_id: int + ) -> Company: + """ + Update a certificate path for a company + certificate_type: fiel_cer, fiel_key, cfdi_cert_cer, cfdi_cert_key, cancel_cer, cancel_key + """ + from .submodels.digital_certificate import CompanyDigitalCertificate + + company = self.get_by_id(self.db, company_id, tenant_id, 0) + if not company: + return None + + # Determinar el tipo de certificado (fiel, cfdi, cancellation) y el campo a actualizar (cer_file_path, key_file_path) + cert_model_type = "" + field_to_update = "" + + if certificate_type == "fiel_cer": + cert_model_type = "fiel" + field_to_update = "cer_file_path" + elif certificate_type == "fiel_key": + cert_model_type = "fiel" + field_to_update = "key_file_path" + elif certificate_type == "cfdi_cert_cer": + cert_model_type = "cfdi" + field_to_update = "cer_file_path" + elif certificate_type == "cfdi_cert_key": + cert_model_type = "cfdi" + field_to_update = "key_file_path" + elif certificate_type == "cancel_cer": + cert_model_type = "cancellation" + field_to_update = "cer_file_path" + elif certificate_type == "cancel_key": + cert_model_type = "cancellation" + field_to_update = "key_file_path" + else: + raise ValueError(f"Invalid certificate type: {certificate_type}") + + # Buscar el registro de certificado existente + target_cert = next((c for c in company.digital_certificates if c.certificate_type == cert_model_type), None) + + try: + if target_cert: + # Si existe, actualizamos + setattr(target_cert, field_to_update, file_path) + else: + # Si no existe, creamos uno nuevo + new_cert_data = { + "certificate_type": cert_model_type, + "company_id": company.id, + field_to_update: file_path + } + new_cert = CompanyDigitalCertificate(**new_cert_data) + self.db.add(new_cert) + + self.db.commit() + self.db.refresh(company) + return company + except Exception as e: + self.db.rollback() + logger.error(f"Error uploading certificate: {str(e)}") + raise HTTPException(status_code=500, detail=f"Error al guardar la referencia del certificado: {str(e)}") + + # Custom methods def get_companies_by_tenant(self, tenant_id: int) -> List[Company]: """Get all companies for a tenant""" diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/__init__.py b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/models.py b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/models.py new file mode 100644 index 00000000..f67d68bd --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/models.py @@ -0,0 +1,29 @@ + +from datetime import datetime +from typing import Optional +from sqlalchemy import String, Numeric, TIMESTAMP, func, UniqueConstraint +from sqlalchemy.orm import Mapped, mapped_column +from core.database import Base + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin + +class CanadianTariffFraction(Base, TenantScopedMixin, TimestampMixin): + """Model for Canadian Tariff Fractions (GFracEUACan)""" + __tablename__ = "canadian_tariff_fractions" + __table_args__ = ( + UniqueConstraint('fraction', 'country_code', 'company_id', name='uq_canadian_fraction_country_company'), + {"schema": "a76"} + ) + + id: Mapped[int] = mapped_column(primary_key=True, index=True) + + # FRACCION + fraction: Mapped[str] = mapped_column(String(13), nullable=False, index=True) + # ADV + ad_valorem: Mapped[Optional[float]] = mapped_column(Numeric(5, 2)) + # UNIDAD + unit_of_measure: Mapped[Optional[str]] = mapped_column(String(5)) + # CLAVEM3 (Part of original PK) + country_code: Mapped[str] = mapped_column(String(3), nullable=False, index=True) + # DESCRIPCION + description: Mapped[Optional[str]] = mapped_column(String(1000)) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/routes.py new file mode 100644 index 00000000..55daf80d --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/routes.py @@ -0,0 +1,98 @@ + +from typing import Optional +from fastapi import APIRouter, Depends, HTTPException, Query +from sqlalchemy.orm import Session +from core.database import get_core_db +from core.security import get_current_user +from .service import CanadianTariffFractionService +from .schemas import ( + CanadianTariffFractionResponse, + CanadianTariffFractionCreate, + CanadianTariffFractionUpdate, + CanadianTariffFractionListResponse +) + +from api.v1.common.tenant_crud_routes import validate_access_to_resource + +router = APIRouter() + +@router.get("/", response_model=CanadianTariffFractionListResponse) +def list_canadian_fractions( + company_id: int = Query(..., description="Company ID"), + page: int = Query(1, ge=1), + page_size: int = Query(50, ge=1, le=1000), + search: Optional[str] = None, + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + tenant_id = validate_access_to_resource(db, company_id, current_user) + skip = (page - 1) * page_size + service = CanadianTariffFractionService(db) + items, total = service.get_multi( + tenant_id=tenant_id, + company_id=company_id, + skip=skip, + limit=page_size, + search=search + ) + return { + "items": items, + "total": total, + "page": page, + "page_size": page_size, + "pages": (total + page_size - 1) // page_size if page_size > 0 else 1 + } + +@router.get("/{id}", response_model=CanadianTariffFractionResponse) +def get_canadian_fraction( + id: int, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = CanadianTariffFractionService(db) + item = service.get(id, tenant_id, company_id) + if not item: + raise HTTPException(status_code=404, detail="Not found") + return item + +@router.post("/", response_model=CanadianTariffFractionResponse) +def create_canadian_fraction( + item_in: CanadianTariffFractionCreate, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = CanadianTariffFractionService(db) + return service.create(item_in, tenant_id, company_id) + +@router.put("/{id}", response_model=CanadianTariffFractionResponse) +def update_canadian_fraction( + id: int, + item_in: CanadianTariffFractionUpdate, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = CanadianTariffFractionService(db) + item = service.get(id, tenant_id, company_id) + if not item: + raise HTTPException(status_code=404, detail="Not found") + return service.update(item, item_in) + +@router.delete("/{id}", response_model=CanadianTariffFractionResponse) +def delete_canadian_fraction( + id: int, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = CanadianTariffFractionService(db) + item = service.get(id, tenant_id, company_id) + if not item: + raise HTTPException(status_code=404, detail="Not found") + return service.delete(id, tenant_id, company_id) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/schemas.py b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/schemas.py new file mode 100644 index 00000000..4748e4ca --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/schemas.py @@ -0,0 +1,32 @@ + +from typing import Optional, List +from pydantic import BaseModel, Field, ConfigDict +from datetime import datetime +from decimal import Decimal + +class CanadianTariffFractionBase(BaseModel): + fraction: str = Field(..., max_length=13) + ad_valorem: Optional[Decimal] = Field(None, max_digits=5, decimal_places=2) + unit_of_measure: Optional[str] = Field(None, max_length=5) + country_code: str = Field(..., max_length=3) + description: Optional[str] = Field(None, max_length=1000) + +class CanadianTariffFractionCreate(CanadianTariffFractionBase): + pass + +class CanadianTariffFractionUpdate(CanadianTariffFractionBase): + pass + +class CanadianTariffFractionResponse(CanadianTariffFractionBase): + id: int + created_at: datetime + updated_at: datetime + + model_config = ConfigDict(from_attributes=True) + +class CanadianTariffFractionListResponse(BaseModel): + items: List[CanadianTariffFractionResponse] + total: int + page: int + page_size: int + pages: int diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/service.py new file mode 100644 index 00000000..8fec1468 --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/canadian_tariff_fractions/service.py @@ -0,0 +1,73 @@ + +from typing import Optional, List, Tuple +from sqlalchemy import select, func +from sqlalchemy.orm import Session +from .models import CanadianTariffFraction +from .schemas import CanadianTariffFractionCreate, CanadianTariffFractionUpdate + +class CanadianTariffFractionService: + def __init__(self, db: Session): + self.db = db + + def get(self, id: int, tenant_id: int, company_id: int) -> Optional[CanadianTariffFraction]: + return self.db.query(CanadianTariffFraction).filter( + CanadianTariffFraction.id == id, + CanadianTariffFraction.tenant_id == tenant_id, + CanadianTariffFraction.company_id == company_id + ).first() + + def get_multi( + self, + tenant_id: int, + company_id: int, + skip: int = 0, + limit: int = 100, + search: Optional[str] = None + ) -> Tuple[List[CanadianTariffFraction], int]: + query = select(CanadianTariffFraction).where( + CanadianTariffFraction.tenant_id == tenant_id, + CanadianTariffFraction.company_id == company_id + ) + + if search: + query = query.where( + (CanadianTariffFraction.fraction.ilike(f"%{search}%")) | + (CanadianTariffFraction.description.ilike(f"%{search}%")) + ) + + total = self.db.execute(select(func.count()).select_from(query.subquery())).scalar_one() + # Add deterministic sort order + query = query.order_by(CanadianTariffFraction.fraction) + items = self.db.scalars(query.offset(skip).limit(limit)).all() + return items, total + + def create(self, obj_in: CanadianTariffFractionCreate, tenant_id: int, company_id: int) -> CanadianTariffFraction: + db_obj = CanadianTariffFraction( + **obj_in.model_dump(), + tenant_id=tenant_id, + company_id=company_id + ) + self.db.add(db_obj) + self.db.commit() + self.db.refresh(db_obj) + return db_obj + + def update( + self, + db_obj: CanadianTariffFraction, + obj_in: CanadianTariffFractionUpdate + ) -> CanadianTariffFraction: + update_data = obj_in.model_dump(exclude_unset=True) + for field, value in update_data.items(): + setattr(db_obj, field, value) + self.db.add(db_obj) + self.db.commit() + self.db.refresh(db_obj) + return db_obj + + def delete(self, id: int, tenant_id: int, company_id: int) -> Optional[CanadianTariffFraction]: + obj = self.get(id, tenant_id, company_id) + if obj: + self.db.delete(obj) + self.db.commit() + return obj diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/dto.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/dto.py new file mode 100644 index 00000000..3bf70308 --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/dto.py @@ -0,0 +1,29 @@ +""" +DTOs for historical tariff fractions. +""" + +from datetime import datetime +from decimal import Decimal +from typing import Optional + +from pydantic import BaseModel, ConfigDict + + +class HistoricalTariffFractionResponseDTO(BaseModel): + id: int + historical_fraction: Optional[str] = None + unit_of_measure_code: Optional[str] = None + country: Optional[str] = None + fraction_type: Optional[str] = None + sector: Optional[str] = None + import_tax_rate: Optional[Decimal] = None + export_tax_rate: Optional[Decimal] = None + publication_date: Optional[datetime] = None + is_immex: Optional[bool] = None + normal_temporality: Optional[bool] = None + services_temporality: Optional[bool] = None + certified_temporality: Optional[bool] = None + by_log: Optional[bool] = None + end_date: Optional[datetime] = None + + model_config = ConfigDict(from_attributes=True) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/models.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/models.py index 13a7068e..4f2fc3e6 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/models.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/models.py @@ -4,9 +4,10 @@ from decimal import Decimal from sqlalchemy import DateTime, ForeignKey, String, Integer, Numeric, Boolean from sqlalchemy.orm import Mapped, mapped_column from core.database import Base +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin -class HistoricalTariffFraction(Base): +class HistoricalTariffFraction(Base, TenantScopedMixin, TimestampMixin): """ Historical tariff fractions catalog. Maps to SQL Server table: GFraccionesHistorico @@ -17,6 +18,7 @@ class HistoricalTariffFraction(Base): id: Mapped[int] = mapped_column(Integer, primary_key=True, nullable=False) historical_fraction: Mapped[Optional[str]] = mapped_column(String(8), nullable=True) + nico: Mapped[Optional[str]] = mapped_column(String(2), nullable=True) unit_of_measure_code: Mapped[Optional[str]] = mapped_column(ForeignKey("a76.unit_of_measure_customs.code"), nullable=True) country: Mapped[Optional[str]] = mapped_column(ForeignKey("public.countries.m3_key"), nullable=True) fraction_type: Mapped[Optional[str]] = mapped_column(String(7), nullable=True) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/routes.py new file mode 100644 index 00000000..7a020605 --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/routes.py @@ -0,0 +1,101 @@ +from typing import List, Optional +from fastapi import APIRouter, Depends, HTTPException, Query +from sqlalchemy.orm import Session +from core.database import get_core_db +from core.security import get_current_user +from .service import HistoricalTariffFractionService +from .schemas import HistoricalTariffFractionResponse, HistoricalTariffFractionCreate, HistoricalTariffFractionUpdate, HistoricalTariffFractionListResponse + +from api.v1.common.tenant_crud_routes import validate_access_to_resource + +router = APIRouter() + +@router.get("/", response_model=HistoricalTariffFractionListResponse) +def get_historical_fractions( + company_id: int = Query(..., description="Company ID"), + page: int = Query(1, ge=1, description="Page number"), + page_size: int = Query(50, ge=1, le=1000, description="Page size"), + historical_fraction: Optional[str] = Query(None, description="Search by historical fraction code"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + """ + Get all historical tariff fractions (paginated). + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + skip = (page - 1) * page_size + service = HistoricalTariffFractionService(db) + items, total = service.get_multi(tenant_id, company_id, skip=skip, limit=page_size, historical_fraction=historical_fraction) + return { + "items": items, + "total": total, + "page": page, + "page_size": page_size, + "pages": (total + page_size - 1) // page_size if page_size > 0 else 1 + } + +@router.get("/{id}", response_model=HistoricalTariffFractionResponse) +def get_historical_fraction( + id: int, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + """ + Get a historical tariff fraction by ID. + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = HistoricalTariffFractionService(db) + fraction = service.get(id, tenant_id, company_id) + if not fraction: + raise HTTPException(status_code=404, detail="Historical tariff fraction not found") + return fraction + +@router.post("/", response_model=HistoricalTariffFractionResponse) +def create_historical_fraction( + fraction_in: HistoricalTariffFractionCreate, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + """ + Create a new historical tariff fraction. + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = HistoricalTariffFractionService(db) + return service.create(fraction_in, tenant_id, company_id) + +@router.put("/{id}", response_model=HistoricalTariffFractionResponse) +def update_historical_fraction( + id: int, + fraction_in: HistoricalTariffFractionUpdate, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + """ + Update a historical tariff fraction. + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = HistoricalTariffFractionService(db) + fraction = service.get(id, tenant_id, company_id) + if not fraction: + raise HTTPException(status_code=404, detail="Historical tariff fraction not found") + return service.update(fraction, fraction_in) + +@router.delete("/{id}", response_model=HistoricalTariffFractionResponse) +def delete_historical_fraction( + id: int, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user = Depends(get_current_user) +): + """ + Delete a historical tariff fraction. + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + service = HistoricalTariffFractionService(db) + fraction = service.get(id, tenant_id, company_id) + if not fraction: + raise HTTPException(status_code=404, detail="Historical tariff fraction not found") + return service.delete(id, tenant_id, company_id) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/schemas.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/schemas.py new file mode 100644 index 00000000..e6cc1c53 --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/schemas.py @@ -0,0 +1,45 @@ + +from typing import Optional, List +from datetime import datetime +from decimal import Decimal +from pydantic import BaseModel, Field + +class HistoricalTariffFractionBase(BaseModel): + """Base schema for Historical Tariff Fraction""" + historical_fraction: Optional[str] = Field(None, max_length=8) + unit_of_measure_code: Optional[str] = None + country: Optional[str] = None + fraction_type: Optional[str] = Field(None, max_length=7) + sector: Optional[str] = Field(None, max_length=5) + import_tax_rate: Optional[Decimal] = None + export_tax_rate: Optional[Decimal] = None + publication_date: Optional[datetime] = None + is_immex: Optional[bool] = None + normal_temporality: Optional[bool] = None + services_temporality: Optional[bool] = None + certified_temporality: Optional[bool] = None + by_log: Optional[bool] = None + end_date: Optional[datetime] = None + +class HistoricalTariffFractionCreate(HistoricalTariffFractionBase): + """Schema for creating a Historical Tariff Fraction""" + pass + +class HistoricalTariffFractionUpdate(HistoricalTariffFractionBase): + """Schema for updating a Historical Tariff Fraction""" + pass + +class HistoricalTariffFractionResponse(HistoricalTariffFractionBase): + """Schema for reading a Historical Tariff Fraction""" + id: int + + class Config: + from_attributes = True + +class HistoricalTariffFractionListResponse(BaseModel): + """Schema for paginated list of Historical Tariff Fractions""" + items: List[HistoricalTariffFractionResponse] + total: int + page: int + page_size: int + pages: int diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/seed.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/seed.py index 4a318498..4bc9e7cf 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/seed.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/seed.py @@ -1,6592 +1,6592 @@ seed = [ - ('1012901', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1039102', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1039202', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1039203', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1041002', '7', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1051101', '7', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1051102', '7', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1061901', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1061903', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1062001', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1062002', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1062003', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1062099', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1063901', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('1063902', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071301', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071302', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071303', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071399', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071401', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071403', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2071404', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2072601', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2072602', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2072699', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2072701', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2072703', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2076001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2076002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2076099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2089001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2089002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2109901', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('2109903', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3029001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3039001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3044402', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3044499', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3044902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3044903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3044904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045302', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045399', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3045903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3047402', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3047499', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3048902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3048903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049502', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049599', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3049904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3053905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3054906', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055906', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3055907', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3056901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3056902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3056903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3056904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3056905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057203', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057204', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057205', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057206', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057207', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057208', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057906', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3057907', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062401', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062501', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062699', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062701', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062799', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3062901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3074101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3074199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3074901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('3078999', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4011001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4011099', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4012001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4012099', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4014001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4014099', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4015001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4015099', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4051001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4051099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4063001', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4063099', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4069003', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4069005', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4069006', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4072101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4072199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4079001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4089101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4089199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('4089901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5079001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5080001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5080099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5100001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5100002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5100003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5100099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5119101', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5119902', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5119906', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('5119907', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6011099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012005', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012006', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012007', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012008', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012009', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6012099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6021099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6022001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6022002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6022003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6022099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029005', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029008', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029009', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029010', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029011', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029012', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6029013', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031401', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031499', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031902', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031903', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031904', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031905', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031906', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031907', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6031908', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6042002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6042003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6049002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6049003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('6049004', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7020001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7020002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2013-05-15 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7020099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7031001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7031099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7032001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7032099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7041001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7041002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7041099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7049001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7092001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7092099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7094001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7094099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7095901', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7096001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7096099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7099901', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7108002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7108003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7108004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7109001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7109099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7119001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7119002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7129002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7129003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7133302', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7133303', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('7149001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8029001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8041001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8041099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8042001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8042099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8045001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8045002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8045003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8052001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8055001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8055002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8055099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8071901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8093001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8093002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8129001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8129002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8131001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8131099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8132001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8132099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8134001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8134002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8134003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('8134099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9011101', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9011199', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9019001', '1', 'None', 'GENERAL', 'None', '60.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9042101', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9042199', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9042201', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9042299', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9109901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('9109902', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10039001', '1', 'None', 'GENERAL', 'None', '60.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10059001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10059002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10059003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10063001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('10063099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11029001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11029002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11031901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11031902', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11031999', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11032001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11032099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11041901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11041999', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11042901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11042999', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11062001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11062099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11063001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11063099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11081901', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('11081999', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12060001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12060099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12076001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12076002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12079901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12079902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12089001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12089002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12092901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12092902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12092903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12092905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099111', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099112', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099113', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099114', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12099906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119005', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119006', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12119007', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2014-12-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12129201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12129299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12129401', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12129499', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('12129904', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13019001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13019002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021103', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021910', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021911', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13021912', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13022001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13022099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('13023903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('14049001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('14049002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('14049003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('14049004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15030001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15030099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15042001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15042099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15050001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15050002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15050003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15050099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15060002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15091001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15091099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15099001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15099002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15159001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15159002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15159003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15159004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15159005', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15179001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15179002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15219001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15219002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('15219003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16010001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16010002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2018-06-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16010099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16021001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16021099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16022001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16022099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16024901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16025001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16025099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041301', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041303', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041399', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041401', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041402', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041403', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041601', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041603', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041699', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041902', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16041903', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042004', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042005', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042006', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042007', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042008', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042009', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16042099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16051001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('16051099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17011201', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17011204', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17011401', '1', 'None', 'GENERAL', 'None', '0.34', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17011404', '1', 'None', 'GENERAL', 'None', '0.34', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17019102', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17019103', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17019901', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17019902', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17026001', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17026002', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17026099', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('17031002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('18069001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('18069002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('19011001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('19011099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('19012001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('19019001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('19059001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20019001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20019002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20019003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20049001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20049002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20049099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20059901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20059902', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20079904', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20081101', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20081199', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20081901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20081999', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083003', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083004', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083005', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083006', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083007', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083008', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20083099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20089901', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20091201', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20091299', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20091901', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20093101', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20093199', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20093901', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20094101', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20094199', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20094901', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20099001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('20099099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21011101', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21021001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21032001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21032099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21033001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21033099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21061003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21061004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21069002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('21069006', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22011001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22011099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029002', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029003', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029004', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029005', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2009-12-16 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22029099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22041001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22041099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22042101', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22042102', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22042103', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22042199', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22051001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22051099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22059001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22060001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22060099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22083001', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22083002', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22083003', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22083004', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22083099', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22084001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22084099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22087001', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22087002', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22087099', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22089002', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22089003', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22089004', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('22089005', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23011001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23011099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23024001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23024099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23069001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23080001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23080099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099007', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099008', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099009', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099010', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('23099011', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24011001', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24011099', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24012001', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24012002', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24012099', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24039101', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('24039199', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25010001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25010099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25062001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25062099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25084001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25084099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25101001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25101099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25102001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25102099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25131001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25131099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25241001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25241002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25249001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25249002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('25309009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26020001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26020099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26060001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26060099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26100001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26100099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26140001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26140002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26140099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26151001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26151099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26190001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26190099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26204001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26204099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26209101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26209199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26209901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26209902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('26209903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27040001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27040002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27079901', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27079902', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27079903', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27090002', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27090003', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27090004', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101201', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101202', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101203', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101205', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101207', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101208', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101209', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101210', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101291', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101901', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101903', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101905', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101906', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101907', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101908', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101909', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101910', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27101991', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27111902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27111903', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('27129004', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28042901', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28047001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28047002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28047003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28047099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28051901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28100001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28100099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28111901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28112902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28121001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28121002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28121003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28121099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28152001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28152002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28164001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28164002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28181001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28181002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28181099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28182001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28182099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28183001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28183002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28201001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28201099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28211001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28211002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28211003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28249001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28251001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28251099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28254001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28254099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28255001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28255002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28255099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28259001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28261901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28261902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28269001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28273906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28274101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28274199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28291101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28291102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28291901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28309001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28309002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28319001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28321001', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28321099', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28322001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28332901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28332902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28332904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28334001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28334002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28334099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28341001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28341099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28352501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28352599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28352901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28352902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28352903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28364001', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28364002', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28369901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28369902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28369903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28369904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28371101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28371199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28371901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28372001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28372099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28399001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28399002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28399003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28399099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28415001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28415002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28415099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28419001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28421001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28421099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28429001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28439001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28444001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28444002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28444099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28469001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28469002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28480001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28480002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28480003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28480099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28492001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28500001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28500002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28500099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28521001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28521002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28521003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28521099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28529001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('28530001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29011001', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29011002', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29011003', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29011004', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29011099', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29021901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29021902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29021903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29029007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29031904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29032901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29033901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29033902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037701', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037702', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037703', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037704', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037799', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037901', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037904', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29037905', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29038203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29038901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29038902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29039902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29039903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29039904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29039906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29042007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29049099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051403', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051699', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29051908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052205', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29052903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29053903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29053904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29054901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29054902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29055901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29055902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29055903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29055904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29055905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29061903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29062901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29062902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29062903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29062904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29062906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071502', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29071909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29072905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29081907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29089912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29091901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29091902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29091903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29093099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29094402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29095002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29095003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29095004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29095005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29109002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29110001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29110002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29110003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29110099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29121912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29122901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29122903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29122904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29122905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29124901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29124902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29124903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29124906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29130001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29130002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29130099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29141901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29141903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29141904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29141905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29141906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29142301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29142302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29143907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29145001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29145002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29145003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29145099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29146901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29146902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29147001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29147002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29147003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29147099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29151201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29151202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29151299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29152901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29152902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29153916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29154002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29154003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29154004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29155001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29155002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29155004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29155005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29156002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29157008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29157009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159013', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159014', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159017', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159021', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29159028', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161502', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161503', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161504', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29161905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29162001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29162002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29162003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29162004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29162099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29163907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29171907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29172001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29172002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29172003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29172099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181304', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181503', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181504', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181699', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29181910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29182916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29183099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29189920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29199012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29201901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29201902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29209013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211103', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29211917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29212911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29213001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214205', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214206', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214207', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214208', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214209', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214210', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214211', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214212', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214213', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214215', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214216', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214218', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214304', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214305', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214306', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214307', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214308', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214309', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214310', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214311', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214312', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214502', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214503', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214504', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214505', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214506', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214507', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29214915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29215910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221301', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221924', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221926', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221929', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221932', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221933', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221934', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221935', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221936', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221937', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221938', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221939', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29221941', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29222924', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29223911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29224101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29224199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225020', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29225022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29232099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29239012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29241201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29241903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29241914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242924', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242926', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242929', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242933', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242934', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242935', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242936', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242937', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242938', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242939', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242940', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242941', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242942', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242943', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242944', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242945', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242946', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242947', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29242948', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29251901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29251902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29251903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29252901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29252902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29252903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29252904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29269009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29270099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29280004', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29291003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29299001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29299002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29302009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29303001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29303099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29305002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309020', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309024', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309025', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309026', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309028', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309029', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309030', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309032', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309033', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309034', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309035', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309036', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309037', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309038', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309039', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309040', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309041', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309042', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309043', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309044', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309045', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309046', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309047', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309048', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309049', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309050', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309051', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309052', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309053', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309054', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309055', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309056', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309057', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309058', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309059', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309060', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309061', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309062', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309063', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309064', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309065', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309066', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309067', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309068', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309069', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309070', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29309071', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29319020', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29321901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29321903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29321904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29321905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29322099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29329911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29331909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29332916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333926', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333929', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29333931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29334913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335502', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29335920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29336916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29337901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29337902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29337903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29337904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29337999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339924', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339929', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339932', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339933', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339934', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339935', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339936', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339937', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339938', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339939', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339940', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339941', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339942', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339943', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339944', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339945', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339946', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339947', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29339948', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29341099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29342001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29342002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29342003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29342004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29342006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29343001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29343099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349926', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349929', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349932', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349933', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349934', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349935', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349936', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349937', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349938', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349939', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349940', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349942', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349943', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349944', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349945', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349946', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349947', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349948', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29349949', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350007', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350020', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350024', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350025', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350026', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350027', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350028', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350029', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350030', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350031', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350032', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350033', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350034', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350035', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350036', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350038', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29350099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362701', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362799', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362802', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362899', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29362908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29369001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29369002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29369004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29369005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29371905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372205', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372206', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372207', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372208', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372209', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372210', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372306', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372309', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372312', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372313', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372314', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372315', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372316', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372319', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372320', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372323', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372921', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372922', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372923', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372925', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372926', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372927', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372928', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372930', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372931', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372934', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372935', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372937', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372938', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372939', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372940', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372941', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29372942', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29375001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29375099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29379001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29379002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29379003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29379004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29389007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391111', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391112', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391113', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391114', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391115', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391116', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391117', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29391906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29392001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29392099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29393001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29393002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29393003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29395901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29395902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29396901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399918', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399919', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29399999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29400001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29400002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29400003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29400004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29400099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29411013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29413001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29413002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29413003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29413099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29414001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29414002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29414003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29415001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29415099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('29419016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30012001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30012002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30019002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30019007', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021005', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021006', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021011', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021012', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021013', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021014', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021015', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021016', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021017', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021020', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021022', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30021099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30022001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30022003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30022004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30022005', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30023001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30023002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30023099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30029002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30029003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30029004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30033101', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30033199', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30033902', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30034003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30034004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30034099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30039006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30039007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30043101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30043199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30043906', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30044003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30044004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30044005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30044099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30045003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30045004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30049003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30049010', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30059002', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30061001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30061002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('30064001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31023001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31023099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31029001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31029099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31031001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31039001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31043001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31043099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31049001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('31059001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32019001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32030002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041205', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041206', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041304', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041403', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041404', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041603', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041604', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041699', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041709', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32041909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32049001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32049002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32050001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32064101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32064199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32064201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32064299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32064906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32065002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32071001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32071099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32074001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32074002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32074099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32081001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32081099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32082001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32082002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32082099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32089001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32091001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32091099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32100001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32100002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32100003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32100099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32110001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32110099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32129001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32129002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32151101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32151102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32151199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32151901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32151903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('32159001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011902', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011904', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011905', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33011906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33012907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33019002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33019003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33062001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('33062099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34021101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34021103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34021201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34021202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34052001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34052099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34070001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('34070002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35019002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35030002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35030003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35030004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35040099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35061001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35069102', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35069103', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35069104', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('35079012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('36020001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37011001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37019902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37019903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37019905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37023101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37023199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37023901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37031001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37031099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37051001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37051099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37059001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37059002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37059099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37079001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('37079099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38013001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38013099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38019002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38019003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38019004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38029001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38029002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38029003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38029004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38029005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38040001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38040099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38051001', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38051099', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38063001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38063002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38063099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38085099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38089902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38099203', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38109001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38111101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38111199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38112901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38112902', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38112903', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38123099', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38151299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38159001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38159003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38160001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38160003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38160004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38160005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38170004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38190001', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38190002', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38220001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38220002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38220004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38231201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38231202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38231901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38231902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38237001', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38237099', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38243001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38243099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249005', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249007', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249012', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249015', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249017', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249020', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249021', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249024', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249025', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249026', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249027', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249028', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249029', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249030', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249031', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249032', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249033', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249034', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249035', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249036', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249037', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249038', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249039', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249040', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249041', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249042', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249043', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249044', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249045', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249046', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249047', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249048', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249049', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249050', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249051', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249052', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249053', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249054', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249055', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249056', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249057', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249058', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249059', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249060', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249061', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249062', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249063', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249064', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249065', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249066', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249067', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249068', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249069', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249070', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249071', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249072', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249073', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249074', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249075', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249076', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249077', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38249099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38256101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38256102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38256199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('38256901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39011001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39011002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39019002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39019003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39022001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39022099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39031901', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39031902', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39039004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39042102', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39059901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39059902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39061001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39061099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39071001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39071002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39071003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39071004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39071099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39073001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39074001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39074002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39074003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39074099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39075001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39076001', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39076099', '1', 'None', 'GENERAL', 'None', '9.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39092001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39093001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39093099', '1', 'None', 'GENERAL', 'None', '3.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39094002', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39094004', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39095001', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39095002', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39095003', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39122001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39122099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39123904', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39123905', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39131099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39139001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39139003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39139004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39139007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39139008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39159002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2013-09-02 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39161001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39161099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39162001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39162002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39162099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39169001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39169002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39169003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39169004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39169099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39171001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39171002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39171003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39171004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39171099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39172999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39173201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39173202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39173299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39181001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39181099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39201001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39201002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39201003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39201004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39201099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39202001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39202002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39202003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39202004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39202099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39203001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39203002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39203003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39203099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39204301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39204302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39204399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39204901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39204902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39205901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39206201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39206301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39206302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39206399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39207301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39207399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39207901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39207999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39209201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39209299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39209901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39209999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39211301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39211399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39211901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39211999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39219008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39231001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39231002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39232901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39232902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39232999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39233001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39233099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39262002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39263001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39263099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269025', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269026', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269028', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269030', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269031', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269032', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269033', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269034', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('39269035', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40012901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40013001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40013002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40013099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40021101', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40024901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40026001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40026099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40029102', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40052001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40052099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40059101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40059102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40059103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40059199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40081901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40082101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40082199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40082901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40082902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40091101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40091199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40091201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40091202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40091299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40092299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40093299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40094299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40101904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103699', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40103904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111005', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111007', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111008', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111009', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40111099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40112002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40112003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116299', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116399', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40116999', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119299', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119399', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119499', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40119999', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40122002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40129001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40129003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40159004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169401', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40169910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40170001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('40170002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41012001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41012002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41015001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41015002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41015099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41019001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41019002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41019099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41039001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41039002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41039003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041101', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041102', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041103', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041199', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041901', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041902', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41041903', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41044101', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41044199', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41044901', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41051001', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41051002', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41051003', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41051099', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41062101', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41062102', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41062103', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41062199', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41064001', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41064099', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41071101', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41071199', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41071201', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41071299', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41071901', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41079901', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('41139001', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42021201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42021202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42022201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42022202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42023201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42023202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42029201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42029202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42029203', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42033001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42033099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42050001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('42060002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43018099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43021901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43021902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43021903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43022001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43022099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43023001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('43023099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44011001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44031001', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44032099', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44034901', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44034902', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44039201', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44041001', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44041099', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44050001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44050002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44061001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44069099', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44071001', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44071002', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44071003', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44071004', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44071099', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072101', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072102', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072199', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072201', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072299', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072901', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072902', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44072903', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079201', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079299', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079501', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079502', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079599', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079901', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079902', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44079903', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44081001', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44081002', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2009-12-16 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44083901', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44089001', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44091001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44092101', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44092102', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44092199', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44092901', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44092902', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44101903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111203', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111204', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111205', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111302', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111303', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111304', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111305', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111402', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111404', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44111405', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119299', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119301', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119302', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119303', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119399', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119401', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119402', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119403', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44119499', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44123201', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44123299', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44123901', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44123999', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44129402', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44152001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44152099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44160002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44160003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44160004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44187101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44187202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44187299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44187901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44189001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44189099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44190001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44219001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44219002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44219003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44219004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('44219099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('45041001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('45041003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('46012901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('46019301', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('46019399', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47020001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47020099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47031101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47031102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47031199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47031901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47031902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47032101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47032102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47032901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47032902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47063001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47063002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('47063003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48022001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48022002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48022099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025401', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025402', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025403', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025405', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025406', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025407', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025501', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025601', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025701', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025799', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025801', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025802', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025803', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48025899', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026101', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026102', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026199', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026299', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48026901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48030002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48030003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48041901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48041902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48043903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48044901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48044902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48045101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48045199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48045901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48045902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48052401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48052499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48052501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48052599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48070001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48070002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48070099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48084001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48084002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48084003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48084099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48089001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48099001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101304', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101305', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101306', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101403', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101404', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101405', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101406', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48101499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48102201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48102299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48102901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48103104', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48109901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48111001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115103', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115106', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48115906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48116001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48116002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48116099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48119009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48149001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48169001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48169002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48192001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48192099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48201001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48201099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48232001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48232099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48237001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48237002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239006', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239007', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239008', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239009', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239013', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239014', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239015', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('48239016', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49019101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49019102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49019103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49019199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49021001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49021099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49029001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49070001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49070002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49089001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49089004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119104', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('49119905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('50030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('50030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51011101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51011199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51011901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51012101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51012199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51012901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51013001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51013099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51021901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51021902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51022001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51022099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51031001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51031002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51031099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51032001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51032002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51032099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51052901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51053901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51053902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51111101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51111199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51111901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51112001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51112099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51113001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51113099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51121101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51121199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51121901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51121902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51122001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51122099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51123001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51123002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51123099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51130001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('51130099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52010001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52010002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52010099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52029901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52081901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52081902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52081999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52082901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52082999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52083901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52083999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52085901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52085902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52085999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52091901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52091999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52092901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52092999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52093901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52093999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52094202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52094203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52094291', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52094292', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52095901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52095999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52101101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52101199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52101901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52101902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52101999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52102901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52102902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52102999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52103901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52103999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52104901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52104999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52105901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52105902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52105999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52111101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52111199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52111901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52111999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52112001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52112002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52112003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52112099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52113901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52113999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52114202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52114203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52114291', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52114292', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52115901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52115999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52122401', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('52122499', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53050099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53089001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53089002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53110001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('53110099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54021901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54022001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54022099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54023901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024501', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024502', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024504', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024701', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024702', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024799', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024801', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024802', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024899', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024902', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54024905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025299', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54025905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026299', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54026905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54033101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54033102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54033201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54033202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54033901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54034101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54034102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54034901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54041201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54041299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54041901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54041902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54041903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54050001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54050002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54050003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54050004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54050099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54060003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54071001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54071002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54071099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54072001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54072099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54073001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54073002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54073003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54073099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074204', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54074399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075204', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075391', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075392', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075393', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075402', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075403', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54075404', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076105', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076191', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076192', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076193', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076991', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076992', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54076993', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54077301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54077302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54077303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54077399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54078201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54078202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54078203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54078299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079105', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079106', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079107', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079204', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079205', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079206', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079304', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079305', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079306', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079307', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079401', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079402', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079403', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079404', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079405', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079406', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079407', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54079499', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54081001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54081002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54081003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54081004', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54081099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082204', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082304', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082305', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082401', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54082499', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083204', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083205', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083304', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083401', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083402', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083403', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('54083499', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55012001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55012003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55020001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55020099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55032001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55032002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55041001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55041099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121104', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121991', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121992', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55121993', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131302', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55131999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132303', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132304', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132391', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55132999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133904', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133905', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133906', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133991', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55133999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134904', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134905', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134991', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55134999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55141901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55141999', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55143001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55143002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55143003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55143004', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55143099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151202', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151203', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55151902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55152902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159102', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159103', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159903', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55159904', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163201', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163299', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163301', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163399', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163401', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('55163499', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56012101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56012199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56013001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56013099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56021001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56021099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56022101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56022102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56022199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56031201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56031299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56031301', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56031399', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56049003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56060001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56060002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56060099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56079001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56081101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56081199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56090001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('56090099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57025001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57025002', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57025099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57032001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57032099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57033001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57033099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57050001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('57050099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('58030001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('58030002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('58030003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('58030004', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('58030099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59019001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59019002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59031001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59031099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59032001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59032099', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59039001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59039003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59039004', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59039005', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59049001', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59049002', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59069101', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59069199', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59069901', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59069902', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59069903', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59070002', '3', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59070003', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59070004', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59080001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59080002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59119002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('59119003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60011002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60011099', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012202', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012203', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60012902', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60019102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60019199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60019202', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60019203', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60019299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60024002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60024003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60024004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60029002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60029003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60029004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60041002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60041003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60041004', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60041005', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60041006', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053301', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053402', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60053499', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60059001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062301', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062399', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062401', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60062499', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063102', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063199', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063202', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063299', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063302', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063399', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063402', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('60063499', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61012002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61012099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61013003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61013091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61013092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61019001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61019099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61022002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61022099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61023002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61023003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61031001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61031002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61031003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61031004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61031099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61032901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61032999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61033301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61033399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61033901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61033902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61033999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034204', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034291', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034292', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034302', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034303', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034304', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034305', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61034999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041903', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041904', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041905', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61041999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61042901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61042999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61043301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61043399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61043901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61043902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61043999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044391', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044392', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044401', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044403', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044499', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61044999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045391', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045392', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61045999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046206', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046291', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046292', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046302', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046303', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046304', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61046999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61051003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61051004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61051099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61052002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61052099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61059001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61059099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61061003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61061004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61061091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61061092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61062091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61062092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61069001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61069002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61069099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61071102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61071199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61071202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61071299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61072999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61079901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61079902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61079999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61082102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61082199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61082202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61082299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61083999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089101', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089199', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61089999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61091002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61091099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61099002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61099003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61099091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61099092', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61099093', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61101102', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61101199', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61101202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61101299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61101901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102093', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102094', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61102099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103005', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103006', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103007', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61103093', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109005', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109006', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109091', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61109099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112005', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112007', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112008', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112009', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112011', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112013', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112014', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112015', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112016', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112017', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112018', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112019', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112020', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61112099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113005', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113008', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113009', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113010', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113011', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113012', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113013', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113014', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113015', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113016', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113017', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113018', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113019', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113020', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113093', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61113099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61119001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61119002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61119003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61119004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61119099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61121901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61121902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61121999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61122001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61122099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61130001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61130099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61143001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61143099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61149001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61149099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61161001', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61161099', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61171001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61171099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('61178001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62011291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62011292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62011391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62011392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62019291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62019292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62021291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62021292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62021391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62021392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62029291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62029292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62029391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62029392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62031901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62031902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62031999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62032901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62032999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033903', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62033999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034207', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034208', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034209', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034210', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034293', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034294', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034295', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034296', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034304', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034305', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034308', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034309', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034310', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034311', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034393', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034394', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034395', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62034396', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041903', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62041999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043393', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043903', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62043999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044303', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044491', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044492', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62044999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045391', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045392', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045903', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045904', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045905', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62045999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046206', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046207', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046208', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046210', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046291', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046292', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046293', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046294', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046295', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046296', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046304', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046305', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046307', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046308', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046309', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046310', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046393', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046394', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046395', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046904', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62046905', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62062001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62062099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62063002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62063003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62071102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62071199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62072102', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62072199', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62072901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62072999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62079901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62079902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62079999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082102', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082199', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62082999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089203', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089291', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62089999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092005', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092008', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092009', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092010', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092011', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092012', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092013', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092014', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092015', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62092099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093006', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093007', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093008', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093009', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093010', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093091', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093092', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62093099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62099001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62099002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62099003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62099004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62099099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62112001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62112099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113902', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62113999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62114201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62114299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62114301', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62114399', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121005', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121006', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62121008', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62129001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62129002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62139001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62139003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62139099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62171002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('62171099', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022102', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022103', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022104', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022105', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022106', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022107', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022108', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022109', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022202', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022203', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022204', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022205', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022206', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022207', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022208', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022209', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63022299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023107', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023108', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023109', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023110', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023111', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023112', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023113', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023114', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023199', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023207', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023208', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023209', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023210', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023211', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023212', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023213', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023214', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63023299', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63025901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63025999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63026002', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63026003', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63026004', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63026005', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63026099', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63029901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63029999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63031901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63031999', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63039201', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63039299', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63061901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63061999', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63062901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63062999', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63063001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63063099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63064001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63064099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63069001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63101001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63101099', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('63109001', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64011002', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64011099', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019202', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019203', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019204', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019205', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019206', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019207', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019208', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019209', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019210', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019901', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019902', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019903', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019904', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019905', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019906', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019907', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64019908', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021902', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021903', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021904', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021905', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021906', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021907', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021908', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64021909', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64022002', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64022003', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029103', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029104', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029105', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029107', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029903', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029904', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029907', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029908', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029909', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029910', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029911', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029912', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029913', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029914', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029916', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029917', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029918', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029922', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029923', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029924', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029925', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029926', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029927', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029928', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029929', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029930', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029931', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64029932', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64031901', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64031903', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64031904', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64031991', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64034002', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64034003', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64034004', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035101', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035102', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035103', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035104', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035901', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035902', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035903', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035904', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035905', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035906', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64035907', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039101', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039105', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039106', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039107', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039108', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039109', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039110', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039111', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039903', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039904', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039905', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039907', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039908', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039909', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039910', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64039911', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041104', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041105', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041107', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041108', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041110', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041111', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041113', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041114', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041115', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041118', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041119', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041120', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041121', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041122', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041901', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041904', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041905', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041906', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041907', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041909', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041910', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041911', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041912', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041913', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041914', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041915', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041916', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041917', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64041991', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64042002', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64042003', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64042099', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64052003', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64052004', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64052005', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64052091', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64059001', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64059002', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061002', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061005', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061006', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061007', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('64061099', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65050001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65050002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65050003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65050099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65069901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('65069999', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('66039001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68022301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68022399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68022901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68022999', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68041001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68041099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68042399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68051099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68109901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68114001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68114002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68128002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68128003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68128004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68128007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68129301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68129399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68129901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68129904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68132001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68132002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68132003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68132004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68132099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68138901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68138902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68141001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68141099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68159101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('68159199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69029001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69029002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69029003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69031001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69031002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69031099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69032099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69039001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69071001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69079001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69079002', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69079099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69081001', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69089002', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69089003', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69089099', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69091199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69120001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('69120099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70022001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70022002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70022003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70022004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70022099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70023101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70023102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70023199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70031201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70031299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70031901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70031999', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70042001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70042002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70042099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70049001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70049099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70051001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70051099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70052904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70060001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70060002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70060003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70060099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70071102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70071103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70071901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70072101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70072102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70091001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70091002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70091003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70109001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70109002', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70109003', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70111001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70111002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70111003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70111004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70111099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70112001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70112002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70112003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70112004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70112099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70119001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70132801', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70133701', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70133702', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70133703', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70134901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70134902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70134903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70134904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70171013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70172002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70179001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70179002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70179005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70189001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70193901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70193902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70193903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70193904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70194001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70194099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70195101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70195199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70195901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70199008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('70200099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71011001', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71011099', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71129101', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71129199', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71131901', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71131902', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('71159001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72015001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72015099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72022101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72022199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72029903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72071201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72071299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72072001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72072099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72081001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72081002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72081004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72081099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72082501', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72082599', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72084001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72084099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72085101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72085102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72085103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091501', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091502', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091503', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091599', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091802', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72091899', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72101201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72101202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72101203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72101299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72103001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72103099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72104903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72105001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72105002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72105099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72106901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72107003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72107004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72107005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72107091', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72107099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72109001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72109091', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111401', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111402', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111404', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111499', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72111904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112301', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112302', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112399', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72112903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72121001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72121002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72121099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72122001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72122002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72122099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72123001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72123002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72123099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72124001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72124002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72124003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72124099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72126001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72126002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72126003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72126099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72139101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72139102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72139901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72139902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72149101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72149102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72149199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72149901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72149902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72155001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72155099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72159001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72163101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72163102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72163199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72163201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72163202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72166901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72166902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72171001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72171099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72172001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72172099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72173001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72173099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72191201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72191299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72193599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72202001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72202002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72202099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72210002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72210099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72221101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72221199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72223001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72223099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72224002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72224099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72230001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72230099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241091', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72241099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72249001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72249003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253006', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253008', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253091', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72253099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254007', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254091', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72254099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255006', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255008', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255009', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255010', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255011', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255012', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255091', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72255099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269104', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269105', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269108', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269109', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269110', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269111', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269112', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269191', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269203', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269204', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269205', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269207', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72269902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72272002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72272099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72279001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72279002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72279003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72281001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72281099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72282001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72282099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72283003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72284001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72284099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72285001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72285099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72286001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72286003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72286099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72287002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72287099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72299001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72299002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72299003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('72299004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73021001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73021003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73021099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73024001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73024099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73029001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73029002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73030099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73041105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73041991', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042301', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042303', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042401', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042402', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042403', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042404', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042405', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042406', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042499', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042903', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042904', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042905', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73042906', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73043191', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73044101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73044102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73044199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73044901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045111', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045191', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045916', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045917', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045991', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73045992', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73051101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73051199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73051201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73051299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73051901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73059001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73061901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73063005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73063006', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73063091', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73065003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73065004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73066102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73066103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73066199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73066901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73066902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73071906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73072201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73072299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73079905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73082001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73082099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73083001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73083099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73090001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73090002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73090003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73090099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73101001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73101002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73101003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73101004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73101099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73102902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73102903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73102904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73110001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73110002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73110003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73110004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73110099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73121010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73141901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73141902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73151999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73158902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181502', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181503', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181505', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181506', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181507', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181508', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181509', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181510', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181603', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181604', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181605', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73181902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182299', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182401', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182499', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73182901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73201001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73201099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73202001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73202002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73202003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73202004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73202099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73209001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73209002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73209003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73218101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73218199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73218201', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73218299', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73221101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73221199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239203', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239301', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239302', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239303', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239304', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239399', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239401', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239402', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239403', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239404', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73239499', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73249001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73249002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73249003', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73249099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73251001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73251002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73251003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73251004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73251099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73259906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73261914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73262099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('73269018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74010001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74010002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74032901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74032999', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74040001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74040002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74040099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74071002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072101', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74072905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74081101', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74081199', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74102101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74102102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74102103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74102199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74111002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74111003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74111004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112203', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112204', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74112904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74130001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74130099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74151001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74151099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74152901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74153301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74153302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74153399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74153901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199911', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199912', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199913', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199914', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('74199915', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75061001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75061099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75062001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75062099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75089001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75089002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('75089003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76011001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76011099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76012001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76012099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76020001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76020099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76072001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76072099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76081001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76081002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76090001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76090099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76151001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76151099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76169991', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('76169992', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('78060001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('78060002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('78060099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('79070001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('79070099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81019601', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81019602', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81019699', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81019901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81029501', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81029599', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81049001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81049002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81110001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81110099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81130001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('81130099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82011001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82011099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82013001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82013099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82019001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82019004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82021002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82021003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82024001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82024099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82029101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82029102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82029103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82029199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82031001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82034002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82041202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82051002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82051003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055103', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055902', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055903', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055904', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055906', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055907', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055911', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055912', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055917', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055918', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82055919', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82056001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82056099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82057001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82057002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82059002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82059003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82059004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071304', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071305', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071306', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071307', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071909', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82071999', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82073001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82073002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82074001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82074002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82074003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82074099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82075099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82076099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82077001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82077002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82077099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82081001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82081099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82082001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82082099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82083001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82083099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82084001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82084002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82084099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82141001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82141099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82142001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82142099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82149002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82149003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82149004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('82159901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83012001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83012099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83016001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83016099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83017001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83017099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83022001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83022099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024101', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024102', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024103', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024104', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024105', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024199', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024201', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024202', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83024299', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83040001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83040002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83040099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83099002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83099004', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83099005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83111001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83112001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83112002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83112003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83112004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83112099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83113002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83113003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('83113004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84069003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84072101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84072199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84073499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84079001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84079099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099112', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099113', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099114', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099115', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099116', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099117', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099118', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099119', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099906', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84099907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84101201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84101299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84101301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84101399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84123901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84131902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84131904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84133001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84133002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84133004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84133005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84133006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84134001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84134099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84135001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84136002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84136003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84136005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84137003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84137004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84137006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139111', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139112', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84139199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84141099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84143009', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148011', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148012', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148013', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148014', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148015', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84148016', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84149099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84159001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84159099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84169001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84169099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84171001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84171002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84171004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84171005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84172001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84172099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84183003', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84184003', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84185002', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186102', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186902', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186903', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186911', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186916', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84186917', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84189901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84189902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84191902', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84191903', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84192001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84192099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84193905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84194001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84194002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84194003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84195001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84195002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84195004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84195005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198912', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198913', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198914', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198916', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198920', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84198921', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84199001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84199002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84199003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84199099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84209101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84209199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211201', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211299', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84211904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84212103', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84212904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84212905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84212907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84213901', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84213904', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84219903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84222003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84223010', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84224001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84224003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84224004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84224005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84224006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84229001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84229002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84229003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84229004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84229099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84231001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84231099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84233001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84233099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84238101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84238102', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84238201', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84238202', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84239001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84239099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84241001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84241002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84241099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84242002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84242003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84243001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84243002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84243003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248106', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84248902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84264103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84264104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84264901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84264902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84269101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84269102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84269901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84269902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84271002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84279001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84279099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84282001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84283901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84283902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84284001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84289004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84289005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84294001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84294099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84295904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84303101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84303102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84303199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84304101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84304102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84304199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84304901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84304902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84312001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84312099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84313101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84313199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314399', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84314903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84322901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84323001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84323002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84323003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84323099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84324001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84328001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84328002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84328003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84328099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84332001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84332002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84332099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84334001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84334002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84334099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84335901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84335902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84335903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84335904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84336001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84336002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84336003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84336099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84339001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84339002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84339003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84339099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84362901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84368001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84368002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84368003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84368099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84371001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84371002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84371003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84371099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84378001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84378002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84378099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84379001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84379099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84381002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84381005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84381006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84381007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84382001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84382002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84382099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84384001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84384099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84385008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84386001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84386002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84386003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84386005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84388001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84388002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84388003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84388099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84389099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84391099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84401001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84401099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84411001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84411002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84411003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84411099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84414001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84414099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84423001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84423002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84423099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84425002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431501', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431599', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84431903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433204', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433205', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433206', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433207', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433208', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84433908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439907', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84439909', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84451901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84453001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84453099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84459001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84472001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84472099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84479001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84484901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84501201', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84501299', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84501901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84509001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84509002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84509099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84512101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84512199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84512901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84512902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84512903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84518001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84518099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84519001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84519002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84519099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84522907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84529002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84542001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84542099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84543001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84543099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84549001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84549099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84552299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84553001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84553002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84553099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84561001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84561099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84562001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84562099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84573001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84573004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84581102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84581902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84589101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84589199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84589901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84591001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84591099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84592101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84592199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84592901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84594001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84594099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84597001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84597002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84597099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84601101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84601199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84601901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84602904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84603101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84603199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84603901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84604001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84604002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84604099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84609001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84609002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84609003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84612001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84612099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84613001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84613099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84615001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84619002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84619004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84619005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84622904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84623102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84623902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84624101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84624102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84624103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84624199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84624903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84629901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84629902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84629903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84633001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84633002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84633003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84633099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84639001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84649001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84659903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84661001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84661002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84662001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84662099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84663001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84663002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84663099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84669301', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84669302', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84669402', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84671101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84671199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84671901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84672201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84678901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84679101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84679199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84679901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84679902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84682001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84682099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84690001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84690002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84690003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84690004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84690099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84701001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84701002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84701099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84702901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84709001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84709002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84716001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84716002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84716003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84716099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84718001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84718002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84718003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84718099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729007', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729008', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729009', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729011', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84729015', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84731001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84731099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84733001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84733002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84733003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84734001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84734002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84734099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84735001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84735002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84735099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84741002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84742001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84742002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84742003', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84742005', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84742006', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84743901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84743902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84748010', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84749001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84749002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84749099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84769001', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84769099', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84772002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84778007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84779001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84779002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84779003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84779099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84781005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84791002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84791005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84791006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84791008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84794001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84794099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798106', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798108', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798109', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798909', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798911', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798915', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798916', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798917', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798918', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798923', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798924', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84798925', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799017', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84799099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84803001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84803002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84803099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84804101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84804199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84804901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84805001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84805002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84805099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84807904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84811002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84812011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84813002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84813003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84814001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84814002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84814003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84819001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84819002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84819003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84819004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84819099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84821001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84821003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84822002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84829101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84829199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84829902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84829903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84831099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84833001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84833002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84833003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84833099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84834099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84835001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84835002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84835099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84839001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84839002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84839099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84849001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84849002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84862002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84862099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84869001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84869002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84869003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84869004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84871001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('84871099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85011099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85012001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85012002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85012003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85012004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85012099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85013402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85013403', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85013404', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85014007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015205', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015306', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85015307', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85016402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85022002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85030001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85030002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85030003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85030004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85030006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85042104', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043106', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043202', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043301', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85043399', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85044003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85044004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85044010', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85044012', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85045001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85045002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85045099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85049001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85049003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85049004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85049005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85049006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85059099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85061002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85061099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85072003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85081901', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85094001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098005', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098008', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098010', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098011', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85098012', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85099001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85111001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85111002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85112001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85112002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85112003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85112099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85113001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85113002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85113003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85113004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85113099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85114001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85114002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85114003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85114099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85115001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85115002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85115003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85115004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85115099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85119099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85121001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85121002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85121099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85129099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85143002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85143003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85143004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85143005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85143006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85144001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85144099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85149001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85149002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85149003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85149099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85152901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85158001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85158002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85158099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85161001', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85161099', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85162901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85166002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85168001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85168002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85168003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85168099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85169010', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85171201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85171299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85171801', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176204', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176205', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176206', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176207', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176208', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176209', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176210', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176211', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176212', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176213', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176214', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176215', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176216', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176909', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176910', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176911', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176912', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176918', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85176920', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85177013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85181001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85181002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85181003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85181099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85182101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85182199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85182201', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85182299', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85182901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85183001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85183002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85184003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85184005', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85184006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85189003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85193001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85193099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198111', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85198904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85211001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85211099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85229014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232906', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85232910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85234901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85235201', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85235202', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85255001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85255002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85255003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85255004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85255099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85256010', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85258001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85258002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85258003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85258004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85258099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85279101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85279199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85279901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85284909', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85285101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85285199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85286101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85286901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85286902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85286903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85286904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85291099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299014', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299017', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85299023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85308001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85311005', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85318002', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85319001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322304', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322305', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322403', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322501', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322503', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322504', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85322905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85323001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85323002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85323003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85323004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85323099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85331001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85331002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85332901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85333101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85333199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85333901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85333902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85334099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85339001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85339002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85339099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85340001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85340002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85340003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85340099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85353099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85354002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85359022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85361001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85361002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85361005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85363001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85363002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85363003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85363004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364104', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364105', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364106', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364107', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364108', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364109', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364110', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364111', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85364905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85365017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85366101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85366102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85366103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85366199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85366901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369013', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369014', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369015', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369016', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369017', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369018', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369019', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369020', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369024', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369025', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369026', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85369027', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85371001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85371002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85372001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85389002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85389003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85389004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85391001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85391002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85391003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85392908', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85393201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85393202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85393203', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85393299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85394901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85399099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401103', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401105', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85401299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85402001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85402099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85406001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85406099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85408903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409103', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409104', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409902', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85409904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85411099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85413099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85414001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85414002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85414003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85419001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85419099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423102', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85423901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85432099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437009', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437010', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437011', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437012', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437013', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437014', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437015', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85437016', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85441901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85443002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444201', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444202', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444203', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444204', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444902', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444903', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444904', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85444906', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85446001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85446099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85459001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85459002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85471001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85471002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85471003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85471004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85471005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85472001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85472002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85472003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85472099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479005', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479006', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479007', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479008', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479009', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479010', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479011', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85479012', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85489001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85489002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('85489003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86040001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86040002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86040099', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86069101', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86069199', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86071901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86071904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86071905', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86071906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86072101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86072199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86079101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86079199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86080001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86080002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86080003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('86080099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019008', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87019099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87021001', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87021002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87021003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87021004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87029002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87029003', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87029004', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87029005', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87029007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87031001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87031002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87031099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87039001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87039003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87041001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87041099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042102', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042103', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042203', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042204', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042205', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87042206', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043103', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043202', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043203', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043204', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043205', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87043206', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87060002', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87071001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87071099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87079001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87082914', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87082915', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87082921', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083012', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083013', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87083014', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87084006', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87085011', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87085012', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87085017', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87085019', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87085021', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87087007', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089201', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089202', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089299', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089304', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089402', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089403', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089404', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089405', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089406', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089407', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089408', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089409', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089410', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089411', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089501', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089599', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089905', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089906', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089910', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089911', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089912', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089913', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87089914', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87091901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87091902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87111001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87111002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87111099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87112002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87112003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87112004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87112099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87113001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87113002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87113003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87113099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87114003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87115001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87115002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87115099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87120001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87120002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87120003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87120004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87120099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87162001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87162002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87162003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87162099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163102', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163901', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163902', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163905', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163906', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87163907', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87168001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87168002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87169001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('87169002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('88010001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('88010099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('89020001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('89020002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('89020099', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90011001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90011099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90013001', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90014001', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90014002', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90014099', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90015001', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90015099', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90019001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90039001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90039099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90061001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90065901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90065902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90066901', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90069101', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90069102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90069199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90089001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90089099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90138001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90138099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90148001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90148002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90148099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90149001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90149099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90158002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90158006', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90158007', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90160001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90160099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90171002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90173001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90173099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90178001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90178002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90179001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90179099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181904', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181907', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181908', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181909', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90181910', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90183201', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90183901', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90183905', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90184901', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90184903', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189021', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189022', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189023', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189024', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189026', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189029', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90189030', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90191001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90200001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211001', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211002', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211003', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211004', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211005', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90211099', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90212101', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90212199', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90213903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90221401', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90221499', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90222101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90222199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90229001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90229002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90258002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90258003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90261099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90262001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90262002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90262005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90262006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90268001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90268002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90268099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90278001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90278002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90278003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90278099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90282001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90289001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90289002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90289099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90291001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90291002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90291004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90292099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90302001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90302099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303301', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303302', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303303', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303304', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303305', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303306', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90303399', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90304001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90304099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90308901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90308902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90308903', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90308904', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90308999', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90309001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90309002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90309003', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90309004', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90309099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90312001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90312099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90314901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90314902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90318003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90318004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90318005', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90318006', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90319002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90321002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90328101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90328199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90329001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('90329099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91011901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91040001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91040002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91040003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91040099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91051101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91051199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91059101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91059199', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91059901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91061001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91061099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91069001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91111001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91111099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91122001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91122099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91131001', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91131099', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91132001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91132099', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91149001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('91149002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('92019002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('92059001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('92099901', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('92099902', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('92099903', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93011001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93011099', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93020001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93020099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93052001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93052099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93062901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93063001', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93063002', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93063003', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93069001', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('93069002', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94015101', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94019001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94031001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94031002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94031099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94032001', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94032002', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94032003', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94032004', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94032099', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94037001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94037002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94037099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94038101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94042101', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94042199', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049004', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049005', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94049006', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94051001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94051002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94051003', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94051099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94052001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94052099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94055001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94055099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('94060001', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95030019', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95030036', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95045001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95045002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95062901', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95069101', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95069102', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95069199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('95089001', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96062901', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96081001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96081099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96084001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96085001', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96085099', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089101', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089199', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089901', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089902', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089904', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96089905', '2', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96121001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96121002', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96138001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('96140002', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97040001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97040099', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97050001', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97050002', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97050003', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('97050004', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010006', '1', 'None', 'GENERAL', 'None', '16.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010011', '8', 'None', 'GENERAL', 'None', '77.26', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010012', '8', 'None', 'GENERAL', 'None', '82.17', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010013', '8', 'None', 'GENERAL', 'None', '114.4', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010015', '6', 'None', 'GENERAL', 'None', '573.48', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010016', '6', 'None', 'GENERAL', 'None', '373.56', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010017', '6', 'None', 'GENERAL', 'None', '51.73', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99010018', '6', 'None', 'GENERAL', 'None', '51.73', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), - ('99020001', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1012901', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1039102', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1039202', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1039203', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1041002', 'None', '7', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1051101', 'None', '7', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1051102', 'None', '7', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1061901', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1061903', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1062001', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1062002', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1062003', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1062099', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1063901', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('1063902', 'None', '7', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071301', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071302', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071303', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071399', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071401', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071403', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2071404', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2072601', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2072602', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2072699', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2072701', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2072703', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2076001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2076002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2076099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2089001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2089002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2109901', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('2109903', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3029001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3039001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3044402', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3044499', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3044902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3044903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3044904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045302', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045399', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3045903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3047402', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3047499', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3048902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3048903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049502', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049599', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3049904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3053905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3054906', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055906', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3055907', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3056901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3056902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3056903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3056904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3056905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057203', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057204', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057205', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057206', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057207', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057208', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057906', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3057907', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062401', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062501', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062699', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062701', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062799', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3062901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3074101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3074199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3074901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('3078999', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4011001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4011099', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4012001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4012099', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4014001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4014099', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4015001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4015099', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4051001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4051099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4063001', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4063099', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4069003', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4069005', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4069006', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4072101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4072199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4079001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4089101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4089199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('4089901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5079001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5080001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5080099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5100001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5100002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5100003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5100099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5119101', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5119902', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5119906', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('5119907', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6011099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012005', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012006', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012007', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012008', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012009', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6012099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6021099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6022001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6022002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6022003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6022099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029005', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029008', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029009', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029010', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029011', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029012', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6029013', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031401', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031499', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031902', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031903', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031904', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031905', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031906', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031907', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6031908', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6042002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6042003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6049002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6049003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('6049004', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7020001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7020002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2013-05-15 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7020099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7031001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7031099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7032001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7032099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7041001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7041002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7041099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7049001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7092001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7092099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7094001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7094099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7095901', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7096001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7096099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7099901', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7108002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7108003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7108004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7109001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7109099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7119001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7119002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7129002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7129003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7133302', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7133303', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('7149001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8029001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8041001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8041099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8042001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8042099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8045001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8045002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8045003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8052001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8055001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8055002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8055099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8071901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8093001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8093002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8129001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8129002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8131001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8131099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8132001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8132099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8134001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8134002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8134003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('8134099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9011101', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9011199', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9019001', 'None', '1', 'None', 'GENERAL', 'None', '60.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9042101', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9042199', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9042201', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9042299', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9109901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('9109902', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10039001', 'None', '1', 'None', 'GENERAL', 'None', '60.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10059001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10059002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10059003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10063001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('10063099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11029001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11029002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11031901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11031902', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11031999', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11032001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11032099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11041901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11041999', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11042901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11042999', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11062001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11062099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11063001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11063099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11081901', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('11081999', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12060001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12060099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12076001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12076002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12079901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12079902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12089001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12089002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12092901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12092902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12092903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12092905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099111', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099112', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099113', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099114', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12099906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119005', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119006', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12119007', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2014-12-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12129201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12129299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12129401', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12129499', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('12129904', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13019001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13019002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021103', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021910', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021911', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13021912', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13022001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13022099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('13023903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('14049001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('14049002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('14049003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('14049004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15030001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15030099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15042001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15042099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15050001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15050002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15050003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15050099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15060002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15091001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15091099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15099001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15099002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15159001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15159002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15159003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15159004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15159005', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15179001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15179002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15219001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15219002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('15219003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16010001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16010002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2018-06-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16010099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16021001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16021099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16022001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16022099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16024901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16025001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16025099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041301', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041303', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041399', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041401', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041402', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041403', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041601', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041603', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041699', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041902', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16041903', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042004', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042005', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042006', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042007', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042008', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042009', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16042099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16051001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('16051099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17011201', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17011204', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17011401', 'None', '1', 'None', 'GENERAL', 'None', '0.34', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17011404', 'None', '1', 'None', 'GENERAL', 'None', '0.34', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17019102', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17019103', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17019901', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17019902', 'None', '1', 'None', 'GENERAL', 'None', '0.36', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17026001', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17026002', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17026099', 'None', '1', 'None', 'GENERAL', 'None', '75.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('17031002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('18069001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('18069002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('19011001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('19011099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('19012001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('19019001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('19059001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20019001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20019002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20019003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20049001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20049002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20049099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20059901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20059902', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20079904', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20081101', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20081199', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20081901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20081999', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083003', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083004', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083005', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083006', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083007', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083008', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20083099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20089901', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20091201', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20091299', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20091901', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20093101', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20093199', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20093901', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20094101', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20094199', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20094901', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20099001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('20099099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21011101', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21021001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21032001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21032099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21033001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21033099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21061003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21061004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21069002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('21069006', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22011001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22011099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029002', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029003', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029004', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029005', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2009-12-16 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22029099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22041001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22041099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22042101', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22042102', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22042103', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22042199', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22051001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22051099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22059001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22060001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22060099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22083001', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22083002', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22083003', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22083004', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22083099', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22084001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22084099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22087001', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22087002', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22087099', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22089002', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22089003', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22089004', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('22089005', 'None', '8', 'None', 'GENERAL', 'None', '20.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23011001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23011099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23024001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23024099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23069001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23080001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23080099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099007', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099008', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099009', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099010', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('23099011', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24011001', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24011099', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24012001', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24012002', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24012099', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24039101', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('24039199', 'None', '1', 'None', 'GENERAL', 'None', '45.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25010001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25010099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25062001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25062099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25084001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25084099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25101001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25101099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25102001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25102099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25131001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25131099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25241001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25241002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25249001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25249002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('25309009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26020001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26020099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26060001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26060099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26100001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26100099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26140001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26140002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26140099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26151001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26151099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26190001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26190099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26204001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26204099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26209101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26209199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26209901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26209902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('26209903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27040001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27040002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27079901', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27079902', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27079903', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27090002', 'None', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27090003', 'None', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27090004', 'None', '15', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101201', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101202', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101203', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101205', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101207', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101208', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101209', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101210', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101291', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101901', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101903', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101905', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101906', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101907', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101908', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101909', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101910', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27101991', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27111902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27111903', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('27129004', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28042901', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28047001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28047002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28047003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28047099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28051901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28100001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28100099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28111901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28112902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28121001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28121002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28121003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28121099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28152001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28152002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28164001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28164002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28181001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28181002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28181099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28182001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28182099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28183001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28183002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28201001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28201099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28211001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28211002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28211003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28249001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28251001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28251099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28254001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28254099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28255001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28255002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28255099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28259001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28261901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28261902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28269001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28273906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28274101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28274199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28291101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28291102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28291901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28309001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28309002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28319001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28321001', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28321099', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28322001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28332901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28332902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28332904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28334001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28334002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28334099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28341001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28341099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28352501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28352599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28352901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28352902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28352903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28364001', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28364002', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28369901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28369902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28369903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28369904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28371101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28371199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28371901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28372001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28372099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28399001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28399002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28399003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28399099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28415001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28415002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28415099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28419001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28421001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28421099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28429001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28439001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28444001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28444002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28444099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28469001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28469002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28480001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28480002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28480003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28480099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28492001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28500001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28500002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28500099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28521001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28521002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28521003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28521099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28529001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('28530001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29011001', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29011002', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29011003', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29011004', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29011099', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29021901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29021902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29021903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29029007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29031904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29032901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29033901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29033902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037701', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037702', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037703', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037704', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037799', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037901', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037904', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29037905', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29038203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29038901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29038902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29039902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29039903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29039904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29039906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29042007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29049099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051403', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051699', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29051908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052205', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29052903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29053903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29053904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29054901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29054902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29055901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29055902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29055903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29055904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29055905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29061903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29062901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29062902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29062903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29062904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29062906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071502', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29071909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29072905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29081907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29089912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29091901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29091902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29091903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29093099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29094402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29095002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29095003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29095004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29095005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29109002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29110001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29110002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29110003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29110099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29121912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29122901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29122903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29122904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29122905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29124901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29124902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29124903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29124906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29130001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29130002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29130099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29141901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29141903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29141904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29141905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29141906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29142301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29142302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29143907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29145001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29145002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29145003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29145099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29146901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29146902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29147001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29147002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29147003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29147099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29151201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29151202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29151299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29152901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29152902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29153916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29154002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29154003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29154004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29155001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29155002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29155004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29155005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29156002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29157008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29157009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159013', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159014', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159017', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159021', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29159028', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161502', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161503', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161504', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29161905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29162001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29162002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29162003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29162004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29162099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29163907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29171907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29172001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29172002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29172003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29172099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181304', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181503', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181504', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181699', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29181910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29182916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29183099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29189920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29199012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29201901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29201902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29209013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211103', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29211917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29212911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29213001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214205', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214206', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214207', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214208', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214209', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214210', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214211', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214212', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214213', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214215', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214216', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214218', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214304', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214305', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214306', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214307', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214308', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214309', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214310', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214311', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214312', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214502', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214503', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214504', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214505', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214506', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214507', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29214915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29215910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221301', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221924', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221926', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221929', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221932', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221933', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221934', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221935', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221936', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221937', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221938', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221939', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29221941', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29222924', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29223911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29224101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29224199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225020', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29225022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29232099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29239012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29241201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29241903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29241914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242924', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242926', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242929', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242933', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242934', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242935', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242936', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242937', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242938', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242939', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242940', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242941', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242942', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242943', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242944', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242945', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242946', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242947', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29242948', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29251901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29251902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29251903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29252901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29252902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29252903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29252904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29269009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29270099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29280004', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29291003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29299001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29299002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29302009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29303001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29303099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29305002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309020', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309024', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309025', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309026', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309028', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309029', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309030', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309032', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309033', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309034', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309035', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309036', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309037', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309038', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309039', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309040', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309041', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309042', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309043', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309044', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309045', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309046', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309047', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309048', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309049', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309050', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309051', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309052', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309053', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309054', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309055', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309056', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309057', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309058', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309059', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309060', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309061', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309062', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309063', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309064', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309065', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309066', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309067', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309068', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309069', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309070', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29309071', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29319020', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29321901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29321903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29321904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29321905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29322099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29329911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29331909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29332916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333926', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333929', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29333931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29334913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335502', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29335920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29336916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29337901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29337902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29337903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29337904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29337999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339924', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339929', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339932', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339933', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339934', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339935', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339936', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339937', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339938', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339939', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339940', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339941', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339942', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339943', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339944', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339945', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339946', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339947', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29339948', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29341099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29342001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29342002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29342003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29342004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29342006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29343001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29343099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349926', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349929', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349932', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349933', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349934', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349935', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349936', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349937', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349938', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349939', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349940', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349942', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349943', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349944', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349945', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349946', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349947', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349948', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29349949', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350007', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350020', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350024', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350025', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350026', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350027', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350028', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350029', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350030', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350031', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350032', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350033', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350034', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350035', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350036', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350038', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29350099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362701', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362799', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362802', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362899', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29362908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29369001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29369002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29369004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29369005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29371905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372205', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372206', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372207', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372208', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372209', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372210', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372306', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372309', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372312', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372313', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372314', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372315', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372316', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372319', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372320', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372323', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372921', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372922', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372923', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372925', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372926', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372927', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372928', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372930', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372931', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372934', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372935', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372937', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372938', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372939', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372940', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372941', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29372942', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29375001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29375099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29379001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29379002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29379003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29379004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29389007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391111', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391112', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391113', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391114', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391115', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391116', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391117', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29391906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29392001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29392099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29393001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29393002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29393003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29395901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29395902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29396901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399918', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399919', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29399999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29400001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29400002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29400003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29400004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29400099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29411013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29413001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29413002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29413003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29413099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29414001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29414002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29414003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29415001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29415099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('29419016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30012001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30012002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30019002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30019007', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021005', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021006', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021011', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021012', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021013', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021014', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021015', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021016', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021017', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021020', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021022', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30021099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30022001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30022003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30022004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30022005', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30023001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30023002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30023099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30029002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30029003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30029004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30033101', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30033199', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30033902', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30034003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30034004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30034099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30039006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30039007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30043101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30043199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30043906', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30044003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30044004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30044005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30044099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30045003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30045004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30049003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30049010', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30059002', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30061001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30061002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('30064001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31023001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31023099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31029001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31029099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31031001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31039001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31043001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31043099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31049001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('31059001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32019001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32030002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041205', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041206', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041304', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041403', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041404', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041603', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041604', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041699', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041709', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32041909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32049001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32049002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32050001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32064101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32064199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32064201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32064299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32064906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32065002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32071001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32071099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32074001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32074002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32074099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32081001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32081099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32082001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32082002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32082099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32089001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32091001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32091099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32100001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32100002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32100003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32100099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32110001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32110099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32129001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32129002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32151101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32151102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32151199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32151901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32151903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('32159001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011902', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011904', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011905', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33011906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33012907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33019002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33019003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33062001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('33062099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34021101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34021103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34021201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34021202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34052001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34052099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34070001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('34070002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35019002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35030002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35030003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35030004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35040099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35061001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35069102', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35069103', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35069104', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('35079012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('36020001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37011001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37019902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37019903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37019905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37023101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37023199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37023901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37031001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37031099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37051001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37051099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37059001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37059002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37059099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37079001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('37079099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38013001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38013099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38019002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38019003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38019004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38029001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38029002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38029003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38029004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38029005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38040001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38040099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38051001', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38051099', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38063001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38063002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38063099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38085099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-11-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38089902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38099203', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38109001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38111101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38111199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38112901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38112902', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38112903', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38123099', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38151299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38159001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38159003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38160001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38160003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38160004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38160005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38170004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38190001', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38190002', 'None', '8', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38220001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38220002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38220004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38231201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38231202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38231901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38231902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38237001', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38237099', 'None', '8', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38243001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38243099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249005', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249007', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249012', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249015', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249017', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249020', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249021', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249024', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249025', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249026', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249027', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249028', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249029', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249030', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249031', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249032', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249033', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249034', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249035', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249036', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249037', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249038', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249039', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249040', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249041', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249042', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249043', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249044', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249045', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249046', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249047', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249048', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249049', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249050', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249051', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249052', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249053', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249054', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249055', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249056', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249057', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249058', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249059', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249060', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249061', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249062', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249063', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249064', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249065', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249066', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249067', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249068', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249069', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249070', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249071', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249072', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249073', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249074', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249075', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249076', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249077', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38249099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38256101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38256102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38256199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('38256901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39011001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39011002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39019002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39019003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39022001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39022099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39031901', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39031902', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39039004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39042102', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39059901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39059902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39061001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39061099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39071001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39071002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39071003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39071004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39071099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39073001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39074001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39074002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39074003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39074099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39075001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39076001', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39076099', 'None', '1', 'None', 'GENERAL', 'None', '9.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39092001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39093001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39093099', 'None', '1', 'None', 'GENERAL', 'None', '3.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39094002', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39094004', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39095001', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39095002', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39095003', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39122001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39122099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39123904', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39123905', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39131099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39139001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39139003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39139004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39139007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39139008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39159002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2013-09-02 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39161001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39161099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39162001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39162002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39162099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39169001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39169002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39169003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39169004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39169099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39171001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39171002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39171003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39171004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39171099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39172999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39173201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39173202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39173299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39181001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39181099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39201001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39201002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39201003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39201004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39201099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39202001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39202002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39202003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39202004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39202099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39203001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39203002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39203003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39203099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39204301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39204302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39204399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39204901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39204902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39205901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39206201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39206301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39206302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39206399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39207301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39207399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39207901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39207999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39209201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39209299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39209901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39209999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39211301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39211399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39211901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39211999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39219008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39231001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39231002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39232901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39232902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39232999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39233001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39233099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39262002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39263001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39263099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269025', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269026', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269028', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269030', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269031', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269032', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269033', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269034', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('39269035', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40012901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40013001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40013002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40013099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40021101', 'None', '1', 'None', 'GENERAL', 'None', '6.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40024901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40026001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40026099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40029102', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40052001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40052099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40059101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40059102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40059103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40059199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40081901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40082101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40082199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40082901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40082902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40091101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40091199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40091201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40091202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40091299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40092299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40093299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40094299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40101904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103699', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40103904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111005', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111007', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111008', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111009', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40111099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40112002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40112003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116299', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116399', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40116999', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119299', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119399', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119499', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40119999', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40122002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40129001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40129003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40159004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169401', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40169910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40170001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('40170002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41012001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41012002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41015001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41015002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41015099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41019001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41019002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41019099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41039001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41039002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41039003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041101', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041102', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041103', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041199', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041901', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041902', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41041903', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41044101', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41044199', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41044901', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41051001', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41051002', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41051003', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41051099', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41062101', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41062102', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41062103', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41062199', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41064001', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41064099', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41071101', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41071199', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41071201', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41071299', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41071901', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41079901', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('41139001', 'None', '4', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42021201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42021202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42022201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42022202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42023201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42023202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42029201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42029202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42029203', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42033001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42033099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42050001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('42060002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43018099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43021901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43021902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43021903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43022001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43022099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43023001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('43023099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44011001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44031001', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44032099', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44034901', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44034902', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44039201', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44041001', 'None', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44041099', 'None', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44050001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44050002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44061001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44069099', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44071001', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44071002', 'None', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44071003', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44071004', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44071099', 'None', '5', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072101', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072102', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072199', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072201', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072299', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072901', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072902', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44072903', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079201', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079299', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079501', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079502', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079599', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079901', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079902', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44079903', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44081001', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44081002', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2009-12-16 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44083901', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44089001', 'None', '5', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44091001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44092101', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44092102', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44092199', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44092901', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44092902', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44101903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111203', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111204', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111205', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111302', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111303', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111304', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111305', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111402', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111404', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44111405', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119299', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119301', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119302', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119303', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119399', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119401', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119402', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119403', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44119499', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44123201', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44123299', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44123901', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44123999', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44129402', 'None', '1', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44152001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44152099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44160002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44160003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44160004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44187101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44187202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44187299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44187901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44189001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44189099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44190001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44219001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44219002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44219003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44219004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('44219099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('45041001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('45041003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('46012901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('46019301', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('46019399', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47020001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47020099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47031101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47031102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47031199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47031901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47031902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47032101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47032102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47032901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47032902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47063001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47063002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('47063003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48022001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48022002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48022099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025401', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025402', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025403', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025405', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025406', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025407', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025501', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025601', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025701', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025799', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025801', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025802', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025803', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48025899', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026101', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026102', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026199', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026299', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48026901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48030002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48030003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48041901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48041902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48043903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48044901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48044902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48045101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48045199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48045901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48045902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48052401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48052499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48052501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48052599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48070001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48070002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48070099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48084001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48084002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48084003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48084099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48089001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48099001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101304', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101305', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101306', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101403', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101404', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101405', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101406', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48101499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48102201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48102299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48102901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48103104', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48109901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48111001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115103', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115106', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48115906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48116001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48116002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48116099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48119009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48149001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48169001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48169002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48192001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48192099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48201001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48201099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48232001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48232099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48237001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48237002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239006', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239007', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239008', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239009', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239013', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239014', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239015', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('48239016', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49019101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49019102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49019103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49019199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49021001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49021099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49029001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49070001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49070002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49089001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49089004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119104', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('49119905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('50030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('50030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51011101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51011199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51011901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51012101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51012199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51012901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51013001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51013099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51021901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51021902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51022001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51022099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51031001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51031002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51031099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51032001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51032002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51032099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51052901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51053901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51053902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51111101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51111199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51111901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51112001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51112099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51113001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51113099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51121101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51121199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51121901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51121902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51122001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51122099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51123001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51123002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51123099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51130001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('51130099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52010001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52010002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52010099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52029901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52081901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52081902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52081999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52082901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52082999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52083901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52083999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52085901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52085902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52085999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52091901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52091999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52092901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52092999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52093901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52093999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52094202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52094203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52094291', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52094292', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52095901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52095999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52101101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52101199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52101901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52101902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52101999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52102901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52102902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52102999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52103901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52103999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52104901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52104999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52105901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52105902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52105999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52111101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52111199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52111901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52111999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52112001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52112002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52112003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52112099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52113901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52113999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52114202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52114203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52114291', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52114292', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52115901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52115999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52122401', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('52122499', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53050099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53089001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53089002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53110001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('53110099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54021901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54022001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54022099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54023901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024501', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024502', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024504', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024701', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024702', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024799', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024801', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024802', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024899', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024902', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54024905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025299', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54025905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026299', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54026905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54033101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54033102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54033201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54033202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54033901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54034101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54034102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54034901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54041201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54041299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54041901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54041902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54041903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54050001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54050002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54050003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54050004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54050099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54060003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54071001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54071002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54071099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54072001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54072099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54073001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54073002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54073003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54073099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074204', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54074399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075204', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075391', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075392', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075393', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075402', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075403', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54075404', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076105', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076191', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076192', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076193', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076991', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076992', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54076993', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54077301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54077302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54077303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54077399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54078201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54078202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54078203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54078299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079105', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079106', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079107', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079204', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079205', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079206', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079304', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079305', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079306', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079307', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079401', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079402', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079403', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079404', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079405', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079406', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079407', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54079499', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54081001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54081002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54081003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54081004', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54081099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082204', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082304', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082305', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082401', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54082499', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083204', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083205', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083304', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083401', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083402', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083403', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('54083499', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55012001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55012003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55020001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55020099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55032001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55032002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55041001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55041099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121104', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121991', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121992', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55121993', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131302', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55131999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132303', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132304', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132391', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55132999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133904', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133905', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133906', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133991', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55133999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134904', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134905', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134991', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55134999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55141901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55141999', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55143001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55143002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55143003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55143004', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55143099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151202', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151203', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55151902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55152902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159102', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159103', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159903', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55159904', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163201', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163299', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163301', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163399', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163401', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('55163499', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56012101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56012199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56013001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56013099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56021001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56021099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56022101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56022102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56022199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56031201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56031299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56031301', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56031399', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56049003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56060001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56060002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56060099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56079001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56081101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56081199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56090001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('56090099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57025001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57025002', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57025099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57032001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57032099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57033001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57033099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57050001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('57050099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('58030001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('58030002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('58030003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('58030004', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('58030099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59019001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59019002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59031001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59031099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59032001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59032099', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59039001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59039003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59039004', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59039005', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59049001', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59049002', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59069101', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59069199', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59069901', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59069902', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59069903', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59070002', 'None', '3', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59070003', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59070004', 'None', '4', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59080001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59080002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59119002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('59119003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60011002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60011099', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012202', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012203', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60012902', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60019102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60019199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60019202', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60019203', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60019299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60024002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60024003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60024004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60029002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60029003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60029004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60041002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60041003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60041004', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60041005', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60041006', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053301', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053402', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60053499', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60059001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062301', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062399', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062401', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60062499', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063102', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063199', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063202', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063299', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063302', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063399', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063402', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('60063499', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61012002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61012099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61013003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61013091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61013092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61019001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61019099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61022002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61022099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61023002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61023003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61031001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61031002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61031003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61031004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61031099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61032901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61032999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61033301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61033399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61033901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61033902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61033999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034204', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034291', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034292', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034302', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034303', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034304', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034305', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61034999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041903', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041904', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041905', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61041999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61042901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61042999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61043301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61043399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61043901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61043902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61043999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044391', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044392', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044401', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044403', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044499', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61044999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045391', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045392', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61045999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046206', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046291', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046292', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046302', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046303', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046304', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61046999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61051003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61051004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61051099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61052002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61052099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61059001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61059099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61061003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61061004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61061091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61061092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61062091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61062092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61069001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61069002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61069099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61071102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61071199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61071202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61071299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61072999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61079901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61079902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61079999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61082102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61082199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61082202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61082299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61083999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089101', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089199', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61089999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61091002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61091099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61099002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61099003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61099091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61099092', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61099093', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61101102', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61101199', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61101202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61101299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61101901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102093', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102094', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61102099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103005', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103006', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103007', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61103093', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109005', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109006', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109091', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61109099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112005', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112007', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112008', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112009', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112011', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112013', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112014', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112015', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112016', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112017', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112018', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112019', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112020', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61112099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113005', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113008', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113009', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113010', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113011', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113012', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113013', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113014', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113015', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113016', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113017', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113018', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113019', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113020', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113093', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61113099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61119001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61119002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61119003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61119004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61119099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61121901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61121902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61121999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61122001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61122099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61130001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61130099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61143001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61143099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61149001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61149099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61161001', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61161099', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61171001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61171099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('61178001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62011291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62011292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62011391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62011392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62019291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62019292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62021291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62021292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62021391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62021392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62029291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62029292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62029391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62029392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62031901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62031902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62031999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62032901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62032999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033903', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62033999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034207', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034208', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034209', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034210', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034293', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034294', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034295', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034296', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034304', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034305', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034308', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034309', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034310', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034311', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034393', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034394', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034395', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62034396', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041903', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62041999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043393', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043903', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62043999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044303', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044491', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044492', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62044999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045391', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045392', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045903', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045904', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045905', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62045999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046206', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046207', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046208', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046210', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046291', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046292', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046293', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046294', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046295', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046296', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046304', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046305', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046307', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046308', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046309', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046310', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046393', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046394', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046395', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046904', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62046905', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62062001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62062099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62063002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62063003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62071102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62071199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62072102', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62072199', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62072901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62072999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62079901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62079902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62079999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082102', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082199', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62082999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089203', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089291', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62089999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092005', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092008', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092009', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092010', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092011', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092012', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092013', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092014', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092015', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62092099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093006', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093007', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093008', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093009', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093010', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093091', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093092', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62093099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62099001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62099002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62099003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62099004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62099099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62112001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62112099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113902', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62113999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62114201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62114299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62114301', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62114399', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121005', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121006', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62121008', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62129001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62129002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62139001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62139003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62139099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62171002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('62171099', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022102', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022103', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022104', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022105', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022106', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022107', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022108', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022109', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022202', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022203', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022204', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022205', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022206', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022207', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022208', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022209', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63022299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023107', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023108', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023109', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023110', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023111', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023112', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023113', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023114', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023199', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023207', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023208', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023209', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023210', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023211', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023212', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023213', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023214', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63023299', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63025901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63025999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63026002', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63026003', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63026004', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63026005', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63026099', 'None', '6', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-05-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63029901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63029999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63031901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63031999', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63039201', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63039299', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63061901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63061999', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63062901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63062999', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63063001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63063099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63064001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63064099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63069001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63101001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63101099', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('63109001', 'None', '1', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64011002', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64011099', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019202', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019203', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019204', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019205', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019206', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019207', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019208', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019209', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019210', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019901', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019902', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019903', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019904', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019905', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019906', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019907', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64019908', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021902', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021903', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021904', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021905', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021906', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021907', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021908', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64021909', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64022002', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64022003', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029103', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029104', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029105', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029107', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029903', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029904', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029907', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029908', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029909', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029910', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029911', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029912', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029913', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029914', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029916', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029917', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029918', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029922', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029923', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029924', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029925', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029926', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029927', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029928', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029929', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029930', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029931', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64029932', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64031901', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64031903', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64031904', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64031991', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64034002', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64034003', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64034004', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035101', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035102', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035103', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035104', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035901', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035902', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035903', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035904', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035905', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035906', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64035907', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039101', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039105', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039106', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039107', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039108', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039109', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039110', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039111', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039903', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039904', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039905', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039907', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039908', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039909', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039910', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64039911', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041104', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041105', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041107', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041108', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041110', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041111', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041113', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041114', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041115', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041118', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041119', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041120', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041121', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041122', 'None', '9', 'None', 'GENERAL', 'None', '30.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041901', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041904', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041905', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041906', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041907', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041909', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041910', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041911', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041912', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041913', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041914', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041915', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041916', 'None', '9', 'None', 'GENERAL', 'None', '25.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041917', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64041991', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64042002', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64042003', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64042099', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64052003', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64052004', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64052005', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64052091', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64059001', 'None', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64059002', 'None', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061002', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061005', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061006', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061007', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('64061099', 'None', '9', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65050001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65050002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65050003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65050099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65069901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('65069999', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('66039001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68022301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68022399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68022901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68022999', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68041001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68041099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68042399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68051099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68109901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68114001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68114002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68128002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68128003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68128004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68128007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68129301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68129399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68129901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68129904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68132001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68132002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68132003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68132004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68132099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68138901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68138902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68141001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68141099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68159101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('68159199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69029001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69029002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69029003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69031001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69031002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69031099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69032099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69039001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69071001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69079001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69079002', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69079099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69081001', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69089002', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69089003', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69089099', 'None', '4', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69091199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69120001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('69120099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70022001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70022002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70022003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70022004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70022099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70023101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70023102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70023199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70031201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70031299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70031901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70031999', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70042001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70042002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70042099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70049001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70049099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70051001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70051099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70052904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70060001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70060002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70060003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70060099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70071102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70071103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70071901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70072101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70072102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70091001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70091002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70091003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70109001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70109002', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70109003', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70111001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70111002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70111003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70111004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70111099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70112001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70112002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70112003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70112004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70112099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70119001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70132801', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70133701', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70133702', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70133703', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70134901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70134902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70134903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70134904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70171013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70172002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70179001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70179002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70179005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70189001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70193901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70193902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70193903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70193904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70194001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70194099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70195101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70195199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70195901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70199008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('70200099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71011001', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71011099', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71129101', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71129199', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71131901', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71131902', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('71159001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72015001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72015099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72022101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72022199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72029903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72071201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72071299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72072001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72072099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72081001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72081002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72081004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72081099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72082501', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72082599', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72084001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72084099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72085101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72085102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72085103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091501', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091502', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091503', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091599', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091802', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72091899', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72101201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72101202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72101203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72101299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72103001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72103099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72104903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72105001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72105002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72105099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72106901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72107003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72107004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72107005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72107091', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72107099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72109001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72109091', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111401', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111402', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111404', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111499', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72111904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112301', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112302', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112399', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72112903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72121001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72121002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72121099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72122001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72122002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72122099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72123001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72123002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72123099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72124001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72124002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72124003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72124099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72126001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72126002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72126003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72126099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72139101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72139102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72139901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72139902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72149101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72149102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72149199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72149901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72149902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72155001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72155099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72159001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72163101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72163102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72163199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72163201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72163202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72166901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72166902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72171001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72171099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72172001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72172099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72173001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72173099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72191201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72191299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72193599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72202001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72202002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72202099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72210002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72210099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72221101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72221199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72223001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72223099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72224002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72224099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72230001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72230099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241091', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72241099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72249001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72249003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253006', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253008', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253091', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72253099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254007', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254091', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72254099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255006', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255008', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255009', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255010', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255011', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255012', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255091', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72255099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269104', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269105', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269108', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269109', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269110', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269111', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269112', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269191', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269203', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269204', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269205', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269207', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72269902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72272002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72272099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72279001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72279002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72279003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72281001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72281099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72282001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72282099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72283003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72284001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72284099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72285001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72285099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72286001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72286003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72286099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72287002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72287099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72299001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72299002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72299003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('72299004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73021001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73021003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73021099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73024001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73024099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73029001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73029002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73030099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73041105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73041991', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042301', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042303', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042401', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042402', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042403', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042404', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042405', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042406', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042499', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042903', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042904', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042905', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73042906', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73043191', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73044101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73044102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73044199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73044901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045111', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045191', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045916', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045917', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045991', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73045992', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73051101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73051199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73051201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73051299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73051901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73059001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73061901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73063005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73063006', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73063091', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73065003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73065004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73066102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73066103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73066199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73066901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73066902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73071906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73072201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73072299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73079905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73082001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73082099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73083001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73083099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73090001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73090002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73090003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73090099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73101001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73101002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73101003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73101004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73101099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73102902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73102903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73102904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73110001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73110002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73110003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73110004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73110099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73121010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73141901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73141902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73151999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73158902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181502', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181503', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181505', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181506', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181507', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181508', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181509', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181510', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181603', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181604', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181605', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73181902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182299', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182401', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182499', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73182901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73201001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73201099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73202001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73202002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73202003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73202004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73202099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73209001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73209002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73209003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73218101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73218199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73218201', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73218299', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73221101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73221199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239203', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239301', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239302', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239303', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239304', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239399', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239401', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239402', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239403', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239404', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73239499', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73249001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73249002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73249003', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73249099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73251001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73251002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73251003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73251004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73251099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73259906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73261914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73262099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('73269018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74010001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74010002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74032901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74032999', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74040001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74040002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74040099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74071002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072101', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74072905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74081101', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74081199', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74102101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74102102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74102103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74102199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74111002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74111003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74111004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112203', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112204', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74112904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74130001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74130099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74151001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74151099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74152901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74153301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74153302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74153399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74153901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199911', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199912', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199913', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199914', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('74199915', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75061001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75061099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75062001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75062099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75089001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75089002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('75089003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76011001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76011099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76012001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76012099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76020001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76020099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76072001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76072099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76081001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76081002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76090001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76090099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76151001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76151099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76169991', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('76169992', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('78060001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('78060002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('78060099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('79070001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('79070099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81019601', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81019602', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81019699', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81019901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81029501', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81029599', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81049001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81049002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81110001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81110099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81130001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('81130099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82011001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82011099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82013001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82013099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82019001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82019004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82021002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82021003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82024001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82024099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82029101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82029102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82029103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82029199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82031001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82034002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82041202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82051002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82051003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055103', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055902', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055903', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055904', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055906', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055907', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055911', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055912', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055917', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055918', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82055919', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82056001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82056099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82057001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82057002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82059002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82059003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82059004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071304', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071305', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071306', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071307', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071909', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82071999', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82073001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82073002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82074001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82074002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82074003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82074099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82075099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82076099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82077001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82077002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82077099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82081001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82081099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82082001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82082099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82083001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82083099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82084001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82084002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82084099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82141001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82141099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82142001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82142099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82149002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82149003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82149004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('82159901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83012001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83012099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83016001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83016099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83017001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83017099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83022001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83022099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024101', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024102', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024103', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024104', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024105', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024199', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024201', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024202', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83024299', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83040001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83040002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83040099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83099002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83099004', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83099005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83111001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83112001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83112002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83112003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83112004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83112099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83113002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83113003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('83113004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84069003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84072101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84072199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84073499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84079001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84079099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099112', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099113', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099114', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099115', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099116', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099117', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099118', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099119', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099906', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84099907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84101201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84101299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84101301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84101399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84123901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84131902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84131904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84133001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84133002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84133004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84133005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84133006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84134001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84134099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84135001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84136002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84136003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84136005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84137003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84137004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84137006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139111', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139112', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84139199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84141099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84143009', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148011', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148012', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148013', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148014', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148015', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84148016', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84149099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84159001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84159099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84169001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84169099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84171001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84171002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84171004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84171005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84172001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84172099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84183003', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84184003', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84185002', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186102', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186902', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186903', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186911', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186916', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84186917', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84189901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84189902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84191902', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84191903', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84192001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84192099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84193905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84194001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84194002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84194003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84195001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84195002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84195004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84195005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198912', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198913', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198914', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198916', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198920', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84198921', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84199001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84199002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84199003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84199099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84209101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84209199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211201', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211299', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84211904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84212103', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84212904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84212905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84212907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84213901', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84213904', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84219903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84222003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84223010', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84224001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84224003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84224004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84224005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84224006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84229001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84229002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84229003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84229004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84229099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84231001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84231099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84233001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84233099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84238101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84238102', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84238201', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84238202', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84239001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84239099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84241001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84241002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84241099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84242002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84242003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84243001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84243002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84243003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248106', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84248902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84264103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84264104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84264901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84264902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84269101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84269102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84269901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84269902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84271002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84279001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84279099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84282001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84283901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84283902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84284001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84289004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84289005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84294001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84294099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84295904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84303101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84303102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84303199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84304101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84304102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84304199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84304901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84304902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84312001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84312099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84313101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84313199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314399', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84314903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84322901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84323001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84323002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84323003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84323099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84324001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84328001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84328002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84328003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84328099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84332001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84332002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84332099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84334001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84334002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84334099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84335901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84335902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84335903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84335904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84336001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84336002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84336003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84336099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84339001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84339002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84339003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84339099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84362901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84368001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84368002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84368003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84368099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84371001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84371002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84371003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84371099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84378001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84378002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84378099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84379001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84379099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84381002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84381005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84381006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84381007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84382001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84382002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84382099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84384001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84384099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84385008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84386001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84386002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84386003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84386005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84388001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84388002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84388003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84388099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84389099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84391099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84401001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84401099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84411001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84411002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84411003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84411099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84414001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84414099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84423001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84423002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84423099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84425002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431501', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431599', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84431903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433204', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433205', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433206', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433207', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433208', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84433908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439907', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84439909', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84451901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84453001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84453099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84459001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84472001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84472099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84479001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84484901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84501201', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84501299', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84501901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84509001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84509002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84509099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84512101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84512199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84512901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84512902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84512903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84518001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84518099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84519001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84519002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84519099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84522907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84529002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84542001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84542099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84543001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84543099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84549001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84549099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84552299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84553001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84553002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84553099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84561001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84561099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84562001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84562099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84573001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84573004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84581102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84581902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84589101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84589199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84589901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84591001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84591099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84592101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84592199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84592901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84594001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84594099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84597001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84597002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84597099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84601101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84601199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84601901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84602904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84603101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84603199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84603901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84604001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84604002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84604099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84609001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84609002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84609003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84612001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84612099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84613001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84613099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84615001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84619002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84619004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84619005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84622904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84623102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84623902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84624101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84624102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84624103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84624199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84624903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84629901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84629902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84629903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84633001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84633002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84633003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84633099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84639001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84649001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84659903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84661001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84661002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84662001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84662099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84663001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84663002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84663099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84669301', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84669302', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84669402', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84671101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84671199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84671901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84672201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84678901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84679101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84679199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84679901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84679902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84682001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84682099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84690001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84690002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84690003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84690004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84690099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84701001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84701002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84701099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84702901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84709001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84709002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84716001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84716002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84716003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84716099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84718001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84718002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84718003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84718099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729007', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729008', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729009', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729011', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84729015', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84731001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84731099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84733001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84733002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84733003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84734001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84734002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84734099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84735001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84735002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84735099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84741002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84742001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84742002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84742003', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84742005', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84742006', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84743901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84743902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84748010', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84749001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84749002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84749099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84769001', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84769099', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84772002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84778007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84779001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84779002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84779003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84779099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84781005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84791002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84791005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84791006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84791008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84794001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84794099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798106', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798108', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798109', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798909', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798911', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798915', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798916', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798917', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798918', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798923', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798924', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84798925', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799017', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84799099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84803001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84803002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84803099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84804101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84804199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84804901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84805001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84805002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84805099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84807904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84811002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84812011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84813002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84813003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84814001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84814002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84814003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84819001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84819002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84819003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84819004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84819099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84821001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84821003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84822002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84829101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84829199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84829902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84829903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84831099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84833001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84833002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84833003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84833099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84834099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84835001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84835002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84835099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84839001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84839002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84839099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84849001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84849002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84862002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84862099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84869001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84869002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84869003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84869004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84871001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('84871099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85011099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85012001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85012002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85012003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85012004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85012099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85013402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85013403', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85013404', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85014007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015205', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015306', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85015307', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85016402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85022002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85030001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85030002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85030003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85030004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85030006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85042104', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043106', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043202', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043301', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85043399', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85044003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85044004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85044010', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85044012', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85045001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85045002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85045099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85049001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85049003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85049004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85049005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85049006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85059099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85061002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85061099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2013-12-13 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85072003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85081901', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85094001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098005', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098008', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098010', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098011', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85098012', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85099001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85111001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85111002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85112001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85112002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85112003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85112099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85113001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85113002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85113003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85113004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85113099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85114001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85114002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85114003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85114099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85115001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85115002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85115003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85115004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85115099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85119099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85121001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85121002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85121099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85129099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85143002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85143003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85143004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85143005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85143006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85144001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85144099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85149001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85149002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85149003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85149099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85152901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85158001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85158002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85158099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85161001', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85161099', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85162901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85166002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85168001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85168002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85168003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85168099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85169010', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85171201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85171299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85171801', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176204', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176205', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176206', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176207', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176208', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176209', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176210', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176211', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176212', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176213', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176214', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176215', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176216', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176909', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176910', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176911', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176912', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176918', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85176920', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85177013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85181001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85181002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85181003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85181099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85182101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85182199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85182201', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85182299', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85182901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85183001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85183002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85184003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85184005', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85184006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85189003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85193001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85193099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198111', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85198904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85211001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85211099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85229014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232906', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85232910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85234901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85235201', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85235202', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85255001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85255002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85255003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85255004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85255099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85256010', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85258001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85258002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85258003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85258004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85258099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85279101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85279199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85279901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85284909', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85285101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85285199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85286101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85286901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85286902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85286903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85286904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85291099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299014', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299017', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85299023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85308001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85311005', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85318002', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85319001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322304', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322305', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322403', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322501', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322503', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322504', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85322905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85323001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85323002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85323003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85323004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85323099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85331001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85331002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85332901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85333101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85333199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85333901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85333902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85334099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85339001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85339002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85339099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85340001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85340002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85340003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85340099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85353099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85354002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85359022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85361001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85361002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85361005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85363001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85363002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85363003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85363004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364104', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364105', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364106', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364107', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364108', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364109', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364110', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364111', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85364905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85365017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85366101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85366102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85366103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85366199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85366901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369013', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369014', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369015', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369016', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369017', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369018', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369019', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369020', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369024', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369025', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369026', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85369027', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85371001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85371002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85372001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85389002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85389003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85389004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85391001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85391002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85391003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85392908', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85393201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85393202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85393203', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85393299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85394901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85399099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401103', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401105', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85401299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85402001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85402099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85406001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85406099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85408903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409103', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409104', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409902', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85409904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85411099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85413099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85414001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85414002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85414003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-11-23 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85419001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85419099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423102', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85423901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85432099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437009', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437010', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437011', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437012', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437013', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437014', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437015', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85437016', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85441901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85443002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444201', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444202', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444203', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444204', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444902', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444903', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444904', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85444906', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85446001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85446099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85459001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85459002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85471001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85471002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85471003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85471004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85471005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85472001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85472002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85472003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85472099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479005', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479006', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479007', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479008', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479009', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479010', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479011', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85479012', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85489001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85489002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('85489003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86040001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86040002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86040099', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86069101', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86069199', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86071901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86071904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86071905', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86071906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86072101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86072199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86079101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86079199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86080001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86080002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86080003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('86080099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019008', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2008-12-24 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87019099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87021001', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87021002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87021003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87021004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87029002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87029003', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87029004', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87029005', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87029007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87031001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87031002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87031099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87039001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87039003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-09-20 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87041001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87041099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042102', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042103', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042203', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042204', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042205', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87042206', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043103', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043202', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043203', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043204', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043205', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87043206', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87060002', 'None', '6', 'None', 'GENERAL', 'None', '20.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87071001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87071099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87079001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87082914', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87082915', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87082921', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083012', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083013', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87083014', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87084006', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87085011', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87085012', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87085017', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87085019', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87085021', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87087007', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089201', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089202', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089299', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089304', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089402', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089403', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089404', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089405', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089406', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089407', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089408', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089409', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089410', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089411', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089501', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089599', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089905', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089906', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089910', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089911', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089912', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089913', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87089914', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87091901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87091902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87111001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87111002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87111099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87112002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87112003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87112004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87112099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87113001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87113002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87113003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87113099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87114003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87115001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87115002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-30 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87115099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87120001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87120002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87120003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87120004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87120099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87162001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87162002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87162003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87162099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163102', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163901', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163902', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163905', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163906', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87163907', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87168001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87168002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87169001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('87169002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('88010001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('88010099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('89020001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('89020002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('89020099', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90011001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90011099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90013001', 'None', '9', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90014001', 'None', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90014002', 'None', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90014099', 'None', '9', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90015001', 'None', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90015099', 'None', '9', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90019001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90039001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90039099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90061001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90065901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90065902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90066901', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90069101', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90069102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90069199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90089001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90089099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90138001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90138099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90148001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90148002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90148099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90149001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90149099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90158002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90158006', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90158007', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2016-01-06 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90160001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90160099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90171002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90173001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90173099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90178001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90178002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90179001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90179099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181904', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181907', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181908', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181909', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90181910', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90183201', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90183901', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90183905', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90184901', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90184903', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189021', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189022', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189023', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189024', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189026', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189029', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90189030', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90191001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90200001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211001', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211002', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211003', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211004', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211005', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90211099', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90212101', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90212199', 'None', '1', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90213903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90221401', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90221499', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90222101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90222199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90229001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90229002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90258002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90258003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90261099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90262001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90262002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90262005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90262006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90268001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90268002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90268099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90278001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90278002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90278003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90278099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90282001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90289001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90289002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90289099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90291001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90291002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90291004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90292099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90302001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90302099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303301', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303302', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303303', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303304', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303305', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303306', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90303399', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90304001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90304099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90308901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90308902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90308903', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90308904', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90308999', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90309001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90309002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90309003', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90309004', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90309099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90312001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90312099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90314901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90314902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90318003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90318004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90318005', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90318006', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90319002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90321002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90328101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90328199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90329001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('90329099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91011901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91040001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91040002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91040003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91040099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91051101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91051199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91059101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91059199', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91059901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91061001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91061099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91069001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91111001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91111099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91122001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91122099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91131001', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91131099', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91132001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91132099', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91149001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('91149002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('92019002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('92059001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('92099901', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('92099902', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('92099903', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93011001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93011099', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93020001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93020099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93052001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93052099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93062901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93063001', 'None', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93063002', 'None', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93063003', 'None', '11', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93069001', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('93069002', 'None', '6', 'None', 'GENERAL', 'None', '5.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94015101', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94019001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94031001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94031002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94031099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94032001', 'None', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94032002', 'None', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94032003', 'None', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94032004', 'None', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94032099', 'None', '6', 'None', 'GENERAL', 'None', '7.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94037001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94037002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94037099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94038101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94042101', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94042199', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2017-10-05 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049004', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049005', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94049006', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2019-04-10 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94051001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94051002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94051003', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94051099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94052001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94052099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94055001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94055099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('94060001', 'None', '1', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95030019', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95030036', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95045001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95045002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2012-06-29 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95062901', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95069101', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95069102', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95069199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('95089001', 'None', '6', 'None', 'GENERAL', 'None', '10.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96062901', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96081001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96081099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96084001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96085001', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96085099', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089101', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089199', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089901', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089902', 'None', '1', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089904', 'None', '2', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96089905', 'None', '2', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96121001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96121002', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96138001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('96140002', 'None', '6', 'None', 'GENERAL', 'None', '15.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97040001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97040099', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97050001', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97050002', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97050003', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('97050004', 'None', '6', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010006', 'None', '1', 'None', 'GENERAL', 'None', '16.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010011', 'None', '8', 'None', 'GENERAL', 'None', '77.26', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010012', 'None', '8', 'None', 'GENERAL', 'None', '82.17', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010013', 'None', '8', 'None', 'GENERAL', 'None', '114.4', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010015', 'None', '6', 'None', 'GENERAL', 'None', '573.48', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010016', 'None', '6', 'None', 'GENERAL', 'None', '373.56', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010017', 'None', '6', 'None', 'GENERAL', 'None', '51.73', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99010018', 'None', '6', 'None', 'GENERAL', 'None', '51.73', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), + ('99020001', 'None', '1', 'None', 'GENERAL', 'None', '0.0', '0.0', '2007-06-18 00:00:00', 'False', 'False', 'False', 'False', 'True', '2020-12-27 00:00:00'), ] diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/service.py new file mode 100644 index 00000000..01579a4f --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/historical_tariff_fractions/service.py @@ -0,0 +1,69 @@ + +from typing import Optional, List, Tuple +from sqlalchemy import select, or_, func +from sqlalchemy.orm import Session +from .models import HistoricalTariffFraction +from .schemas import HistoricalTariffFractionCreate, HistoricalTariffFractionUpdate + +class HistoricalTariffFractionService: + def __init__(self, db: Session): + self.db = db + + def get(self, id: int, tenant_id: int, company_id: int) -> Optional[HistoricalTariffFraction]: + return self.db.query(HistoricalTariffFraction).filter( + HistoricalTariffFraction.id == id, + HistoricalTariffFraction.tenant_id == tenant_id, + HistoricalTariffFraction.company_id == company_id + ).first() + + def get_multi( + self, + tenant_id: int, + company_id: int, + skip: int = 0, + limit: int = 100, + historical_fraction: Optional[str] = None + ) -> Tuple[List[HistoricalTariffFraction], int]: + query = select(HistoricalTariffFraction).where( + HistoricalTariffFraction.tenant_id == tenant_id, + HistoricalTariffFraction.company_id == company_id + ) + + if historical_fraction: + query = query.where(HistoricalTariffFraction.historical_fraction.ilike(f"%{historical_fraction}%")) + + total = self.db.execute(select(func.count()).select_from(query.subquery())).scalar_one() + # Add deterministic sort order + query = query.order_by(HistoricalTariffFraction.historical_fraction) + items = self.db.scalars(query.offset(skip).limit(limit)).all() + return items, total + + def create(self, obj_in: HistoricalTariffFractionCreate, tenant_id: int, company_id: int) -> HistoricalTariffFraction: + db_obj = HistoricalTariffFraction(**obj_in.model_dump()) + db_obj.tenant_id = tenant_id + db_obj.company_id = company_id + self.db.add(db_obj) + self.db.commit() + self.db.refresh(db_obj) + return db_obj + + def update( + self, + db_obj: HistoricalTariffFraction, + obj_in: HistoricalTariffFractionUpdate + ) -> HistoricalTariffFraction: + # db_obj already validated for tenant/company in get() + update_data = obj_in.model_dump(exclude_unset=True) + for field, value in update_data.items(): + setattr(db_obj, field, value) + self.db.add(db_obj) + self.db.commit() + self.db.refresh(db_obj) + return db_obj + + def delete(self, id: int, tenant_id: int, company_id: int) -> Optional[HistoricalTariffFraction]: + obj = self.get(id, tenant_id, company_id) + if obj: + self.db.delete(obj) + self.db.commit() + return obj diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py index da1c2881..5f0f1600 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py @@ -30,6 +30,8 @@ async def list_tariff_fractions( page: int = Query(1, ge=1, description="Page number"), page_size: int = Query(50, ge=1, le=10000, description="Page size"), search: Optional[str] = Query(None, description="Search in code, fraction, description, nico, or umt"), + level: Optional[int] = Query(None, description="Filter by hierarchy level (e.g. 5)"), + catalog: Optional[str] = Query("mex", description="Catalog source: 'mex' (default) or 'usa'"), db: Session = Depends(get_core_db), current_user: Dict[str, Any] = Depends(get_current_user), ): @@ -37,13 +39,20 @@ async def list_tariff_fractions( filters = {} if search: filters["search"] = search + if level is not None: + filters["level"] = level # Updated to async call with Sitar integration # WARNING: Using async def with blocking DB dependency (Session) run in threadpool by FastAPI. # Service.get_all calls Sitar (async) or DB (sync). # This should be fine. + + tenant_id = current_user.get("tenant_id") + company_id = current_user.get("company_id") # Assuming user is context-aware or we use a default? + # If using headers for selected company, it might be in current_user context if middleware sets it. + items, total = await TariffFractionService.get_all( - db, skip, page_size, filters + db, skip, page_size, filters, catalog, tenant_id, company_id ) return { @@ -72,3 +81,132 @@ async def get_tariff_fraction( raise HTTPException(status_code=404, detail="Tariff fraction not found") return TariffFractionResponseDTO.model_validate(item) + +@router.post( + "/", + response_model=TariffFractionResponseDTO, + summary="Create Tariff Fraction", + description="Create a new tariff fraction (Only supported for 'american' catalog)", +) +async def create_tariff_fraction( + fraction_data: TariffFractionCreateDTO, + catalog: str = Query("mex", description="Catalog source: 'mex', 'usa', or 'american'"), + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user: Dict[str, Any] = Depends(get_current_user), +): + """ + Crea una nueva fracción. + - MEX/USA: No permitido (Read-Only) + - AMERICAN: Permitido (Local DB) + """ + from fastapi import HTTPException + + tenant_id = current_user.get("tenant_id") + + if catalog == "american": + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.dto import USTariffFractionCreateDTO + import re + + # Map generic DTO to US DTO + ad_valorem = None + if fraction_data.adv_impo: + try: + # remove non-numeric chars except dot + clean = re.sub(r'[^\d.]', '', fraction_data.adv_impo) + if clean: + ad_valorem = float(clean) + except: + pass + + us_dto = USTariffFractionCreateDTO( + code=fraction_data.code, + description=fraction_data.description, + unit_of_measure=fraction_data.umt, + ad_valorem=ad_valorem, + # Defaults for others + prefix=None, + type_code=None, + fixed_cost=None + ) + + created = USTariffFractionService.create(db, tenant_id, company_id, us_dto) + return TariffFractionService.to_domain_usa_local(created) + + else: + raise HTTPException(status_code=400, detail=f"Creation not allowed for '{catalog}' catalog (Read-Only)") + + +@router.put( + "/{tariff_fraction_id}", + response_model=TariffFractionResponseDTO, + summary="Update Tariff Fraction", + description="Update a tariff fraction (Only supported for 'american' catalog)", +) +async def update_tariff_fraction( + tariff_fraction_id: int, + fraction_data: TariffFractionUpdateDTO, + catalog: str = Query("mex", description="Catalog source: 'mex', 'usa', or 'american'"), + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user: Dict[str, Any] = Depends(get_current_user), +): + from fastapi import HTTPException + + tenant_id = current_user.get("tenant_id") + + if catalog == "american": + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.dto import USTariffFractionUpdateDTO + import re + + ad_valorem = None + if fraction_data.adv_impo: + try: + clean = re.sub(r'[^\d.]', '', fraction_data.adv_impo) + if clean: + ad_valorem = float(clean) + except: + pass + + us_dto = USTariffFractionUpdateDTO( + description=fraction_data.description, + unit_of_measure=fraction_data.umt, + ad_valorem=ad_valorem + ) + + updated = USTariffFractionService.update(db, tenant_id, company_id, tariff_fraction_id, us_dto) + if not updated: + raise HTTPException(status_code=404, detail="US Tariff fraction not found") + return TariffFractionService.to_domain_usa_local(updated) + + else: + raise HTTPException(status_code=400, detail=f"Update not allowed for '{catalog}' catalog (Read-Only)") + + +@router.delete( + "/{tariff_fraction_id}", + summary="Delete Tariff Fraction", + description="Delete a tariff fraction (Only supported for 'american' catalog)", +) +async def delete_tariff_fraction( + tariff_fraction_id: int, + catalog: str = Query("mex", description="Catalog source: 'mex', 'usa', or 'american'"), + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user: Dict[str, Any] = Depends(get_current_user), +): + from fastapi import HTTPException + tenant_id = current_user.get("tenant_id") + + if catalog == "american": + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService + success = USTariffFractionService.delete(db, tenant_id, company_id, tariff_fraction_id) + if not success: + raise HTTPException(status_code=404, detail="US Tariff fraction not found") + return {"ok": True} + + else: + raise HTTPException(status_code=400, detail=f"Delete not allowed for '{catalog}' catalog (Read-Only)") + diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py index fd719085..7a00b364 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py @@ -14,6 +14,8 @@ from .models import TariffFraction from .dto import TariffFractionCreateDTO, TariffFractionUpdateDTO from api.v1.modules.sitar.fracciones.service import FraccionesService from api.v1.modules.sitar.fracciones.schemas import FraccionesResponse +from api.v1.modules.sitar.fracciones_usa.service import FraccionesUSAService +from api.v1.modules.sitar.fracciones_usa.schemas import FraccionesUSAResponse logger = logging.getLogger(__name__) @@ -68,30 +70,130 @@ class TariffFractionMapper: return tf + @staticmethod + def to_domain_usa(item: FraccionesUSAResponse) -> TariffFraction: + """Map US Fraction to Domain""" + return TariffFraction( + id=item.CONSECUTIVO, + code=item.FRACCION_SIN_PUNTO or "", + fraction=item.FRACCION_CON_PUNTO or "", + description=item.DESCRIPCION or "(Sin descripción)", + nico=None, # Not applicable + umt=item.UNIDADCANTIDAD, + adv_impo=item.TARIFA1, + adv_expo=item.TARIFA2 + ) + class TariffFractionService: """Service para gestionar fracciones arancelarias (catálogo global)""" + + @staticmethod + def to_domain_usa_local(item: Any) -> TariffFraction: + """Map Local US Fraction (ORM) to Domain""" + # Formatter helper (simple logic: add dots every 2/4 chars? or just return as is?) + # US format: 1234.56.78.90. For now return as is or use helper if available. + # item is USTariffFraction (imported inside method to avoid circular import if needed, or assumed available) + + return TariffFraction( + id=item.id, + code=item.code, + fraction=item.code, # TODO: Format if needed + description=item.description or "(Sin descripción)", + nico=None, + umt=item.unit_of_measure, + adv_impo=str(item.ad_valorem) if item.ad_valorem is not None else None, + adv_expo=None + ) + @staticmethod async def get_all( db: Session, skip: int = 0, limit: int = 100, filters: Optional[Dict[str, Any]] = None, + catalog: str = "mex", + tenant_id: Optional[int] = None, + company_id: Optional[int] = None, ) -> Tuple[List[TariffFraction], int]: """ Obtiene fracciones arancelarias. - Estrategia: Sitar API -> Fallback Local DB + Estrategia: + - MEX: Sitar API -> Fallback Local DB + - USA: Local DB (Defined by user requirement) """ - # 1. Try Sitar API + # AMERICAN CATALOG HANDLING (LOCAL - 'Fracciones Americanas') + if catalog == "american": + if tenant_id is None or company_id is None: + logger.warning("Solicitud de fracciones Americanas sin tenant/company ID") + return [], 0 + + from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService + + # Use local service directly + usa_items, total = USTariffFractionService._get_all_local( + db, tenant_id, company_id, skip, limit, filters + ) + + items = [TariffFractionMapper.to_domain_usa_local(item) for item in usa_items] + return items, total + + # USA CATALOG HANDLING (API - 'Fracciones US') + if catalog == "usa": + try: + usa_service = FraccionesUSAService.get_instance() + search_term = None + search_description = None + + if filters and filters.get("search"): + term = filters["search"] + # Simple heuristic: if it looks like a code, use code search, else description + # FIX: Short numeric codes (e.g. "01") often fail strict 'fraccion' search. + # Treat them as description search for partial matching. + clean_term = term.replace(".", "") + if clean_term.isdigit() and len(clean_term) >= 4: + search_term = term + else: + search_description = term + + # USA Service search signature: fraccion, descripcion, skip, limit + usa_items = await usa_service.search( + fraccion=search_term, + descripcion=search_description, + skip=skip, + limit=limit + ) + + items = [TariffFractionMapper.to_domain_usa(item) for item in usa_items] + total = len(items) + skip + if len(items) == limit: + total += 1 + return items, total + except Exception as e: + import traceback + logger.error(f"Error fetching USA fractions (API): {e}") + logger.error(traceback.format_exc()) + # Return empty list on error as per requirement (since API is broken) + return [], 0 + + # MEX (SITAR) CATALOG HANDLING try: sitar_service = FraccionesService.get_instance() # Map filters sitar_fraccion = None sitar_nico = None - has_filters = False + + # Default level logic + level_filter = 5 # Default legacy + if filters and filters.get("level") is not None: + level_filter = filters["level"] + + # Allow disabling level filter explicitly + if level_filter == -1: + level_filter = None if filters: if filters.get("search"): @@ -101,7 +203,6 @@ class TariffFractionService: clean_term = term.replace(".", "") if clean_term and clean_term[0].isdigit(): sitar_fraccion = clean_term - has_filters = True else: # Attempt description search via API first logger.info(f"Search term '{term}' identified as text. Attempting API description search.") @@ -109,13 +210,10 @@ class TariffFractionService: if filters.get("code"): sitar_fraccion = filters["code"] - has_filters = True if filters.get("fraction"): sitar_fraccion = filters["fraction"] - has_filters = True if filters.get("nico"): sitar_nico = filters["nico"] - has_filters = True # Determine description filter sitar_description = None @@ -124,7 +222,6 @@ class TariffFractionService: clean_term = filters["search"].replace(".", "") if not (clean_term and clean_term[0].isdigit()): sitar_description = filters["search"] - has_filters = True # Note: Sitar search might not return total count. # We fetch page items. Pagination might be tricky if Sitar doesn't return total. @@ -133,7 +230,7 @@ class TariffFractionService: fraccion=sitar_fraccion, nico=sitar_nico, description=sitar_description, - nivel=5, # User requested filtering by level 5 + nivel=level_filter, # Dynamic level skip=skip, limit=limit ) @@ -194,6 +291,8 @@ class TariffFractionService: query = query.filter(TariffFraction.umt.ilike(f"%{filters['umt']}%")) total = query.count() + # Add deterministic sort order + query = query.order_by(TariffFraction.fraction) items = query.offset(skip).limit(limit).all() return items, total diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/models.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/models.py index cb08b05e..cc9097c4 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/models.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/models.py @@ -9,9 +9,10 @@ from sqlalchemy import String, Numeric, TIMESTAMP, func from sqlalchemy.orm import Mapped, mapped_column from core.database import Base +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin -class USTariffFraction(Base): +class USTariffFraction(Base, TenantScopedMixin, TimestampMixin): """Modelo para fracciones arancelarias americanas (US HTS codes)""" __tablename__ = "us_tariff_fractions" @@ -20,10 +21,6 @@ class USTariffFraction(Base): # Primary Key id: Mapped[int] = mapped_column(primary_key=True, index=True) - # Tenant/Company - tenant_id: Mapped[int] = mapped_column(index=True, nullable=False) - company_id: Mapped[int] = mapped_column(index=True, nullable=False) - # Datos principales code: Mapped[str] = mapped_column( String(16), nullable=False, comment="Código de fracción americana" @@ -47,16 +44,5 @@ class USTariffFraction(Base): String, comment="Descripción de la fracción" ) - # Timestamps - created_at: Mapped[datetime] = mapped_column( - TIMESTAMP(timezone=True), server_default=func.now(), nullable=False - ) - updated_at: Mapped[datetime] = mapped_column( - TIMESTAMP(timezone=True), - server_default=func.now(), - onupdate=func.now(), - nullable=False, - ) - def __repr__(self): return f"" diff --git a/backend/api/v1/modules/a76/general_catalogs/router.py b/backend/api/v1/modules/a76/general_catalogs/router.py index c6beaf5a..aaa47326 100644 --- a/backend/api/v1/modules/a76/general_catalogs/router.py +++ b/backend/api/v1/modules/a76/general_catalogs/router.py @@ -6,6 +6,8 @@ from .packages.routes import router as package_router from .ports.routes import router as ports_router from .fractions.tariff_fractions.routes import router as tariff_fractions_router from .fractions.us_tariff_fractions.routes import router as us_tariff_fractions_router +from .fractions.historical_tariff_fractions.routes import router as historical_tariff_fractions_router +from .fractions.canadian_tariff_fractions.routes import router as canadian_tariff_fractions_router from .depreciation_catalog.routes import router as depreciation_catalog_router from .fda_catalog.routes import router as fda_catalog_router from .seal.routes import router as seal_router @@ -26,14 +28,16 @@ from .electronic_notices.routes import router as electronic_notices_router router = APIRouter() -router.include_router(company_router, tags=["a76 / company"]) +router.include_router(company_router, tags=["a76 / company"]) router.include_router(package_router) router.include_router(ports_router) router.include_router(tariff_fractions_router) router.include_router(us_tariff_fractions_router) +router.include_router(historical_tariff_fractions_router, prefix="/fractions/historical-tariff-fractions", tags=["a76 / historical_tariff_fractions"]) +router.include_router(canadian_tariff_fractions_router, prefix="/fractions/canadian-tariff-fractions", tags=["a76 / canadian_tariff_fractions"]) router.include_router(depreciation_catalog_router) router.include_router(fda_catalog_router) -router.include_router(seal_router, tags=["a76 / seal"]) +router.include_router(seal_router, tags=["a76 / seal"]) router.include_router(units_of_measure_router) router.include_router(identifiers_router) router.include_router(exchange_rate_router, tags=["a76 / exchange_rate"]) @@ -49,4 +53,4 @@ router.include_router(signatures_router) router.include_router(error_catalogs_router) router.include_router(doda_router) router.include_router(prevalidators_router) -router.include_router(electronic_notices_router) \ No newline at end of file +router.include_router(electronic_notices_router) diff --git a/backend/api/v1/modules/a76/imports/__init__.py b/backend/api/v1/modules/a76/imports/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/imports/routes.py b/backend/api/v1/modules/a76/imports/routes.py new file mode 100644 index 00000000..1ea76a74 --- /dev/null +++ b/backend/api/v1/modules/a76/imports/routes.py @@ -0,0 +1,118 @@ +from datetime import datetime +from uuid import uuid4 +import os +import json +import logging +from fastapi import APIRouter, UploadFile, File, Form, HTTPException, Depends, Query +from sqlalchemy.orm import Session +from typing import Optional, Literal, Dict, Any + +from core.celery_app import celery_app +from core.config import settings +from core.database import get_core_db +from core.security import get_current_user, validate_access_to_resource + +from .tasks import scan_file, insert_valid_rows +from .schemas import ImportJobResponse, ImportJobStatus, CommitRequest + +router = APIRouter() +logger = logging.getLogger(__name__) + +@router.post("/upload/{model_target}", response_model=ImportJobResponse) +async def upload_import_file( + model_target: Literal["invoice_header", "invoice_details"], + file: UploadFile = File(...), + footer_config: Optional[str] = Form(None), # JSON string with settings + company_id: int = Query(..., description="Company ID"), # Required for context + operation_type: Optional[str] = Query("imp"), + db: Session = Depends(get_core_db), + current_user: Dict[str, Any] = Depends(get_current_user), +): + """ + Step 1: Upload CSV, save to temp, trigger scan task. + """ + # 1. Validate Access & Get Tenant + try: + tenant_id = validate_access_to_resource(db, company_id, current_user) + except Exception as e: + logger.error(f"Access validation failed: {e}") + raise HTTPException(status_code=403, detail="Invalid company access") + + if not file.filename.endswith(".csv"): + raise HTTPException(status_code=400, detail="Only .csv files allowed") + + job_id = str(uuid4()) + + # Ensure directory exists (Safety check) + upload_dir = os.path.join(os.getcwd(), "uploads", "temp") + os.makedirs(upload_dir, exist_ok=True) + + file_path = os.path.join(upload_dir, f"{job_id}.csv") + meta_path = os.path.join(upload_dir, f"{job_id}.meta.json") + + try: + # Save CSV + contents = await file.read() + with open(file_path, "wb") as f: + f.write(contents) + + # Save Metadata (Context) + meta_data = { + "tenant_id": tenant_id, + "company_id": company_id, + "user_id": current_user.get("id"), + "footer_config": footer_config, + "operation_type": operation_type, + } + with open(meta_path, "w") as f: + json.dump(meta_data, f) + + except Exception as e: + logger.error(f"File save error: {e}") + raise HTTPException(status_code=500, detail=f"Failed to save file: {str(e)}") + + # Trigger Celery Task (Async) + # Use our job_id as the Celery task_id for easier tracking + scan_file.apply_async(args=[job_id, file_path, model_target, footer_config], task_id=job_id) + + return ImportJobResponse( + job_id=job_id, + status="queued", + message="File uploaded. Scanning started." + ) + +@router.get("/{job_id}/status") +async def get_import_status(job_id: str): + """ + Poll this endpoint to get % progress or final report. + """ + # In a real app, query Redis or DB. + # For MVP, we might mock or use Celery AsyncResult if backend shares Redis. + task_result = celery_app.AsyncResult(job_id) + + if task_result.state == 'PENDING': + return {"status": "processing", "progress": 0} + elif task_result.state == 'PROGRESS': + return { + "status": "processing", + "progress": task_result.info.get('current', 0), + "total": task_result.info.get('total', 0) + } + elif task_result.state == 'SUCCESS': + return task_result.result # Should return the report + else: + return {"status": task_result.state, "error": str(task_result.info)} + + +@router.post("/{job_id}/commit") +async def commit_import_job(job_id: str, body: CommitRequest): + """ + Step 2: User confirms import. Trigger bulk insert. + """ + task = insert_valid_rows.delay(job_id, body.model_target) + + return { + "status": "committing", + "message": "Bulk insert started.", + "commit_job_id": task.id + } diff --git a/backend/api/v1/modules/a76/imports/schemas.py b/backend/api/v1/modules/a76/imports/schemas.py new file mode 100644 index 00000000..63c0202a --- /dev/null +++ b/backend/api/v1/modules/a76/imports/schemas.py @@ -0,0 +1,20 @@ +from pydantic import BaseModel +from typing import Optional, Literal + +class ImportJobResponse(BaseModel): + job_id: str + status: str + message: str + +class CommitRequest(BaseModel): + model_target: Literal["invoice_header", "invoice_details"] + +class ImportJobStatus(BaseModel): + status: str + job_id: str + total_rows: Optional[int] = 0 + error_count: Optional[int] = 0 + valid_rows: Optional[int] = 0 + error: Optional[str] = None + inserted: Optional[int] = 0 + error_file: Optional[str] = None diff --git a/backend/api/v1/modules/a76/imports/tasks.py b/backend/api/v1/modules/a76/imports/tasks.py new file mode 100644 index 00000000..58ef97e3 --- /dev/null +++ b/backend/api/v1/modules/a76/imports/tasks.py @@ -0,0 +1,875 @@ +import os +from datetime import datetime +from decimal import Decimal +import csv +import json +import logging +import re +import unicodedata +from celery import shared_task +from typing import Dict, Any, Optional +from core.database import CoreSessionLocal +# Models are imported inside tasks to avoid circular dependencies and mapper initialization issues in the API process + +# We'll need schemas for validation +# from api.v1.modules.a76.invoices.schemas import InvoiceHeaderCreate +# But for Phase 1 we use a lighter check + +logger = logging.getLogger(__name__) + +class ForeignKeyValidator: + def __init__(self, session, tenant_id, company_id): + self.session = session + self.tenant_id = tenant_id + self.company_id = company_id + self.cache = {} # {(model_name, value): bool} + + def check_exists(self, model, value, field_name="id", is_public=False): + if value is None: + return True # Assume optional if None, or let DB handle not-null + + key = (model.__name__, value) + if key in self.cache: + return self.cache[key] + + query = self.session.query(getattr(model, field_name)).filter(getattr(model, field_name) == value) + if not is_public: + query = query.filter(model.tenant_id == self.tenant_id, model.company_id == self.company_id) + + exists = query.first() is not None + self.cache[key] = exists + return exists + +@shared_task(bind=True) +def scan_file(self, job_id: str, file_path: str, model_target: str, config: str = None): + """ + Pass 1: Read CSV, Validate types, Write Errors to JSONL. + """ + logger.info(f"Starting scan for job {job_id} target {model_target}") + + # 1. Setup Error Log + error_path = file_path.replace("temp", "errors").replace(".csv", ".jsonl") + os.makedirs(os.path.dirname(error_path), exist_ok=True) + + total_rows = 0 + error_count = 0 + processed_rows = 0 + + # 2. Count Total (Quick Pass) or just estimate + # For better progress, we can get file line count first + try: + with open(file_path, 'r', encoding='utf-8-sig') as f: + total_rows = sum(1 for _ in f) - 1 # Minus header + except Exception as e: + return {"status": "failed", "error": f"Cannot read file: {e}"} + + footer_config = parse_footer_config(config) + date_format = footer_config.get("dateFormat") + + # Validate and set default date_format if not provided + if not date_format: + date_format = "yyyy-mm-dd" # Default to ISO format + logger.info(f"No date_format specified in config, using default: {date_format}") + + try: + with open(file_path, 'r', encoding='utf-8-sig') as f_in, \ + open(error_path, 'w', encoding='utf-8') as f_err: + + # Detect Delimiter + sample = f_in.read(2048) + f_in.seek(0) + try: + dialect = csv.Sniffer().sniff(sample, delimiters=",;\t") + except: + dialect = 'excel' + + reader = csv.DictReader(f_in, dialect=dialect) + + for i, row in enumerate(reader, start=1): + # Check for Progress Update + if i % 1000 == 0: + self.update_state(state='PROGRESS', meta={ + 'current': i, + 'total': total_rows, + 'errors': error_count + }) + + # Validation (Phase 1: Minimal) + row_norm = normalize_row(row) + errors = validate_row_phase_1(row_norm, model_target, i, date_format) + + if errors: + error_count += 1 + # Write simple JSON error + f_err.write(json.dumps(errors) + "\n") + + processed_rows += 1 + + except Exception as e: + logger.error(f"Scan failed: {e}") + return {"status": "failed", "error": str(e)} + + # 4. Result + return { + "status": "waiting_confirmation", + "job_id": job_id, + "total_rows": processed_rows, + "error_count": error_count, + "valid_rows": processed_rows - error_count, + "error_file": error_path + } + +def validate_row_phase_1( + row: Dict[str, Any], + target: str, + line_num: int, + date_format: Optional[str], +) -> Dict[str, Any]: + """ + Minimal validation: Unique IDs and Dates. + Target: 'invoice_header' or 'invoice_details' + """ + errors = {} + + # A. Invoice Header + if target == 'invoice_header': + # 1. Unique ID + if not row.get('NUMERO FACTURA') and not row.get('NUM FACTURA') and not row.get('ID'): + return {"line": line_num, "col": "NUMERO FACTURA", "msg": "Requerido"} + + # 2. Date Format + date_str = row.get('FECHA FACTURA') + if date_str: + if not is_valid_date(date_str, date_format): + expected = display_date_format(date_format) + return { + "line": line_num, + "col": "FECHA FACTURA", + "msg": f"Formato inválido ({expected})", + } + else: + return {"line": line_num, "col": "FECHA FACTURA", "msg": "Requerido"} + + # B. Invoice Details (Parts) + elif target == 'invoice_details': + # 1. Line Number + if not row.get('LINEA'): + return {"line": line_num, "col": "LINEA", "msg": "Requerido"} + + # 2. Parent Link (Invoice Number) + if not (row.get('NUMERO FACTURA') or row.get('NUM FACTURA') or row.get('FACTURA')): + return {"line": line_num, "col": "NUMERO FACTURA", "msg": "Requerido"} + + # 2. Parent Link (Simplified for now, we assume parent exists or is in same batch) + # In a real scenario, we'd check if the invoice exists. + pass + + return errors if errors else None + +def parse_footer_config(config: Optional[str]) -> Dict[str, Any]: + if not config: + return {} + try: + if isinstance(config, str): + return json.loads(config) + if isinstance(config, dict): + return config + except Exception: + return {} + return {} + + +def display_date_format(date_format: Optional[str]) -> str: + if not date_format: + return "YYYY-MM-DD" + return date_format.upper() + + +def parse_date(date_text: Optional[str], date_format: Optional[str]) -> Optional[datetime.date]: + if not date_text: + return None + candidates = [] + fmt_map = { + "dd/mm/yyyy": "%d/%m/%Y", + "mm/dd/yyyy": "%m/%d/%Y", + "yyyy-mm-dd": "%Y-%m-%d", + } + if date_format and date_format in fmt_map: + candidates.append(fmt_map[date_format]) + candidates.extend(["%Y-%m-%d", "%d/%m/%Y", "%m/%d/%Y"]) + for fmt in candidates: + try: + return datetime.strptime(str(date_text).strip(), fmt).date() + except ValueError: + continue + return None + + +def is_valid_date(date_text: Optional[str], date_format: Optional[str]) -> bool: + return parse_date(date_text, date_format) is not None + + +def normalize_header(name: Optional[str]) -> str: + if not name: + return "" + name = unicodedata.normalize("NFKD", str(name)).upper() + name = "".join(ch for ch in name if not unicodedata.combining(ch)) + name = re.sub(r"[^A-Z0-9]+", " ", name) + return re.sub(r"\s+", " ", name).strip() + + +def normalize_row(row: Dict[str, Any]) -> Dict[str, Any]: + return {normalize_header(k): v for k, v in row.items()} + + +def parse_int(value: Any) -> Optional[int]: + if value is None: + return None + text = str(value).strip() + if not text: + return None + try: + return int(text) + except ValueError: + return None + + +def parse_decimal(value: Any) -> Optional[Decimal]: + if value is None: + return None + text = str(value).strip() + if not text: + return None + text = text.replace(",", "") + try: + return Decimal(text) + except Exception: + return None + + +def parse_currency(value: Optional[str], currency_type: Optional[str]): + from api.v1.modules.a76.invoices.models import Currency + if value: + normalized = normalize_header(value) + if normalized in {"MN", "M N", "NACIONAL", "LOCAL", "PESOS", "PESO"}: + return Currency.LOCAL + if normalized in {"ME", "M E", "EXTRANJERA", "EXTRANJERO", "FOREIGN", "USD", "DOLAR", "DOLARES"}: + return Currency.FOREIGN + if "MANUAL" in normalized: + return Currency.MANUAL + if currency_type and str(currency_type).strip().upper() == "MXN": + return Currency.LOCAL + if currency_type: + return Currency.FOREIGN + return Currency.MANUAL + + +def parse_weight_unit(value: Optional[str]): + from api.v1.modules.a76.invoices.models import WeightUnit + if not value: + return None + normalized = normalize_header(value) + if normalized in {"KG", "KGS", "KILOS", "KILOGRAMOS"}: + return WeightUnit.KGS + if normalized in {"LB", "LBS", "LIBRAS"}: + return WeightUnit.LBS + return None + + +def resolve_tenant_fk_id( + session: CoreSessionLocal, + model, + value: Optional[int], + tenant_id: int, + company_id: int, + cache: Dict[int, Optional[int]], +) -> Optional[int]: + if value is None: + return None + if value in cache: + return cache[value] + exists = ( + session.query(model.id) + .filter( + model.id == value, + model.tenant_id == tenant_id, + model.company_id == company_id, + ) + .scalar() + ) + cache[value] = value if exists is not None else None + return cache[value] + + +def resolve_public_code( + session: CoreSessionLocal, + model, + column, + value: Optional[str], + cache: Dict[str, Optional[str]], +) -> Optional[str]: + if not value: + return None + normalized = str(value).strip().upper() + if not normalized: + return None + if normalized in cache: + return cache[normalized] + exists = session.query(column).filter(column == normalized).scalar() + cache[normalized] = normalized if exists is not None else None + return cache[normalized] + +@shared_task(bind=True) +def insert_valid_rows(self, job_id: str, model_target: str): + """ + Pass 2: Re-read CSV, Skip Errors, Bulk Insert. + """ + logger.info(f"Starting Commit for {job_id} target {model_target}") + + try: + from api.v1.modules.a76.invoices.models import ( + InvoiceHeader, + InvoiceComplianceMx, + InvoiceFinancials, + InvoiceLogistics, + InvoiceSalesDetails, + OperationType, + WeightUnit, + ) + from api.v1.modules.a76.clients_and_providers.models import ClientProvider + from api.v1.modules.a76.customs_brokers.models import CustomsBroker + from api.v1.modules.public.reference_data.currency_types.models import CurrencyType + from api.v1.modules.public.reference_data.pedimento_regimens.models import RegimenPedimento + from api.v1.modules.public.reference_data.code_pedimento_regimens.models import CodePedimentoRegimen + from api.v1.modules.public.reference_data.pedimento_codes.models import PedimentoCode + from api.v1.modules.public.reference_data.invoice_types.models import InvoiceType + from api.v1.modules.public.reference_data.customs_sections.models import CustomsSection + + from api.v1.modules.a76.items.models import LineItem + from api.v1.modules.a76.items.line_financials.models import LineFinancial + from api.v1.modules.a76.items.line_quantities.models import LineQuantity + from api.v1.modules.a76.items.line_customs.models import LineCustom + from api.v1.modules.a76.items.line_descriptions.models import LineDescription + from api.v1.modules.a76.parts.models import Part + + upload_dir = os.path.join(os.getcwd(), "uploads", "temp") + file_path = os.path.join(upload_dir, f"{job_id}.csv") + error_path = file_path.replace("temp", "errors").replace(".csv", ".jsonl") + + # 1. Load Error Line Numbers + error_lines = set() + if os.path.exists(error_path): + with open(error_path, 'r', encoding='utf-8') as f: + for line in f: + try: + err = json.loads(line) + error_lines.add(err['line']) + except: pass + + # Load Metadata (Context) + meta_path = file_path.replace("temp", "temp").replace(".csv", ".meta.json") + tenant_id = None + company_id = None + footer_config = {} + + if os.path.exists(meta_path): + try: + with open(meta_path, 'r') as f: + meta = json.load(f) + tenant_id = meta.get('tenant_id') + company_id = meta.get('company_id') + operation_type_raw = meta.get('operation_type', 'imp') + footer_config = parse_footer_config(meta.get('footer_config')) + except: pass + + if not tenant_id or not company_id: + return {"status": "failed", "error": "Missing context (tenant/company)"} + + # 2. Re-read and Map + # Initialize counters outside the session block so they're accessible later + headers_to_insert = [] + details_to_insert = [] + skipped_invalid = 0 + skipped_missing_invoice = 0 + skipped_missing_fk = 0 + skipped_fk_details = [] + inserted_count = 0 + response = None # Will be set inside the session block + + date_format = footer_config.get("dateFormat") + + # Validate and set default date_format if not provided + if not date_format: + date_format = "yyyy-mm-dd" # Default to ISO format + logger.info(f"No date_format specified in config, using default: {date_format}") + else: + logger.info(f"Using date_format from config: {date_format}") + + # Default types from config or fallback + op_type_value = OperationType(meta.get('operation_type', 'imp').lower()) + inv_type_value = footer_config.get('invoice_type', 'TEM') + + logger.info(f"Processing CSV with operation_type={op_type_value}, invoice_type={inv_type_value}, date_format={date_format}") + + with CoreSessionLocal() as session: + invoice_id_cache = {} + cleared_invoices = set() # Track invoices where we've already cleared items in this job + provider_cache: Dict[int, Optional[int]] = {} + sold_to_cache: Dict[int, Optional[int]] = {} + shipped_to_cache: Dict[int, Optional[int]] = {} + broker_cache: Dict[int, Optional[int]] = {} + regimen_cache: Dict[str, Optional[str]] = {} + currency_type_cache: Dict[str, Optional[str]] = {} + customs_section_cache: Dict[str, Optional[str]] = {} + part_cache: Dict[str, Optional[int]] = {} + + validator = ForeignKeyValidator(session, tenant_id, company_id) + + with open(file_path, 'r', encoding='utf-8-sig') as f: + # Detect Delimiter + sample = f.read(2048) + f.seek(0) + try: + dialect = csv.Sniffer().sniff(sample, delimiters=",;\t") + except: + dialect = 'excel' + + reader = csv.DictReader(f, dialect=dialect) + + for i, row in enumerate(reader, start=1): + if i in error_lines: + continue + + row_norm = normalize_row(row) + + # Mapping Logic + if model_target == 'invoice_header': + invoice_number = (row_norm.get('NUMERO FACTURA') or row_norm.get('NUM FACTURA') or row_norm.get('FACTURA') or '').strip() + invoice_date = parse_date(row_norm.get('FECHA FACTURA') or row_norm.get('FECHA'), date_format) + + if not invoice_number or not invoice_date: + skipped_invalid += 1 + logger.debug(f"Row {i}: Skipped - missing invoice_number or invalid invoice_date. " + f"Invoice: {invoice_number}, Date: {row_norm.get('FECHA FACTURA') or row_norm.get('FECHA')}") + continue + + # --- NEW: Foreign Key Validations --- + # 1. Invoice Type (Public) + if not validator.check_exists(InvoiceType, inv_type_value, field_name="key", is_public=True): + skipped_missing_fk += 1 + reason = f"Tipo de factura '{inv_type_value}' no existe" + skipped_fk_details.append({"line": i, "invoice": invoice_number, "reason": reason}) + logger.warning(f"Row {i} (Invoice {invoice_number}): {reason}") + continue + + # 2. Client/Provider (Tenant) + provider_id = parse_int(row_norm.get('CLAVE PROVEEDOR')) + if provider_id and not validator.check_exists(ClientProvider, provider_id): + skipped_missing_fk += 1 + reason = f"Proveedor ID '{provider_id}' no existe" + skipped_fk_details.append({"line": i, "invoice": invoice_number, "reason": reason}) + logger.warning(f"Row {i} (Invoice {invoice_number}): {reason}") + continue + + # 3. Customs Broker (Tenant) + broker_id = parse_int(row_norm.get('AGENTE ADUANAL')) + if broker_id and not validator.check_exists(CustomsBroker, broker_id): + skipped_missing_fk += 1 + reason = f"Agente Aduanal ID '{broker_id}' no existe" + skipped_fk_details.append({"line": i, "invoice": invoice_number, "reason": reason}) + logger.warning(f"Row {i} (Invoice {invoice_number}): {reason}") + continue + + # --- 4. Check for Existing Invoice (Upsert Logic) --- + existing_header = None + if invoice_number: + existing_header = ( + session.query(InvoiceHeader) + .filter( + InvoiceHeader.tenant_id == tenant_id, + InvoiceHeader.company_id == company_id, + InvoiceHeader.invoice_number == invoice_number, + InvoiceHeader.invoice_type == inv_type_value + ) + .first() + ) + + if existing_header: + # UPDATE existing header + header = existing_header + header.invoice_date = invoice_date + header.operation_type = op_type_value + header.is_updated = True # Mark as updated + header.updated_date = datetime.utcnow() + header.document_type = resolve_public_code( + session, + RegimenPedimento, + RegimenPedimento.code, + (row_norm.get('REGIMEN') or row_norm.get('CLAVEDOCUMENTO')), + regimen_cache, + ) + header.project_number = (row_norm.get('NUM PROYECTO') or row_norm.get('NUMPROYECTO') or None) + header.purchase_order = (row_norm.get('ORDEN COMPRA') or row_norm.get('ORDENCOMPRA') or None) + header.alternate_invoice = (row_norm.get('FACTURA ALTERNA') or None) + header.invoice_ref = (row_norm.get('FACTURA EXPO REF') or row_norm.get('FACTURAEXPOREF') or None) + header.emission_date = parse_date(row_norm.get('FECHA EMISION'), date_format) + header.observation_es = (row_norm.get('OBSERVACIONES E') or None) + header.observation_en = (row_norm.get('OBSERVACIONES I') or None) + + logger.info(f"Row {i}: Updating existing invoice {invoice_number}") + + # Clean up related data that will be re-inserted/updated + # Note: compliance, financials, logistics are 1-to-1 relationships and will be updated by assignment below + # but we might want to be explicit if ORM doesn't handle replace well. + # SQLAlchemy relationship assignment usually handles 1-to-1 updates correctly. + + else: + # CREATE new header + header = InvoiceHeader( + invoice_number=invoice_number, + invoice_date=invoice_date, + operation_type=op_type_value, + is_updated=False, + system="CSV", + capture_date=datetime.utcnow(), + invoice_type=inv_type_value, + document_type=resolve_public_code( + session, + RegimenPedimento, + RegimenPedimento.code, + (row_norm.get('REGIMEN') or row_norm.get('CLAVEDOCUMENTO')), + regimen_cache, + ), + project_number=(row_norm.get('NUM PROYECTO') or row_norm.get('NUMPROYECTO') or None), + purchase_order=(row_norm.get('ORDEN COMPRA') or row_norm.get('ORDENCOMPRA') or None), + alternate_invoice=(row_norm.get('FACTURA ALTERNA') or None), + invoice_ref=(row_norm.get('FACTURA EXPO REF') or row_norm.get('FACTURAEXPOREF') or None), + emission_date=parse_date(row_norm.get('FECHA EMISION'), date_format), + observation_es=(row_norm.get('OBSERVACIONES E') or None), + observation_en=(row_norm.get('OBSERVACIONES I') or None), + tenant_id=tenant_id, + company_id=company_id, + ) + + compliance = InvoiceComplianceMx( + remesa=parse_int(row_norm.get('REMESA')), + aduana=resolve_public_code( + session, + CustomsSection, + CustomsSection.customs_code, + row_norm.get('ADUANA DE CRUCE'), + customs_section_cache, + ), + provider_id=resolve_tenant_fk_id( + session, + ClientProvider, + parse_int(row_norm.get('CLAVE PROVEEDOR')), + tenant_id, + company_id, + provider_cache, + ), + sold_to_id=resolve_tenant_fk_id( + session, + ClientProvider, + parse_int(row_norm.get('CLAVE VENDIDO A')), + tenant_id, + company_id, + sold_to_cache, + ), + shipped_to_id=resolve_tenant_fk_id( + session, + ClientProvider, + parse_int(row_norm.get('CLAVE ENVIADO A')), + tenant_id, + company_id, + shipped_to_cache, + ), + customs_broker_id=resolve_tenant_fk_id( + session, + CustomsBroker, + parse_int(row_norm.get('AGENTE ADUANAL')), + tenant_id, + company_id, + broker_cache, + ), + edocument=(row_norm.get('E DOCUMENT') or None), + vucem_operation_num=(row_norm.get('NUM OPERACION') or None), + tenant_id=tenant_id, + company_id=company_id, + ) + + financials_currency_type = resolve_public_code( + session, + CurrencyType, + CurrencyType.code, + row_norm.get('CLAVE MONEDA'), + currency_type_cache, + ) + financials = InvoiceFinancials( + currency=parse_currency(row_norm.get('TIPO MONEDA'), financials_currency_type), + currency_type=financials_currency_type, + exchange_rate=parse_decimal(row_norm.get('TIPO DE CAMBIO')), + freight=parse_decimal(row_norm.get('FLETES')), + insurance_value=parse_decimal(row_norm.get('VALOR SEGUROS')), + insurance=parse_decimal(row_norm.get('SEGUROS')), + packaging=parse_decimal(row_norm.get('EMBALAJES')), + other_increments=parse_decimal(row_norm.get('OTROS INCREMENTABLES')), + tenant_id=tenant_id, + company_id=company_id, + ) + + weight_type = parse_weight_unit(row_norm.get('TIPO PESO')) + logistics = None + if weight_type or row_norm.get('TIPO TRANSPORTE') or row_norm.get('NUMERO TRANSPORTE'): + logistics = InvoiceLogistics( + carrier_id=(row_norm.get('CLAVE TRANSPORTISTA') or None), + driver_name=(row_norm.get('NOMBRE CONDUCTOR') or None), + transport_type=str(row_norm.get('TIPO TRANSPORTE') or "none").lower(), + transport_num=(row_norm.get('NUMERO TRANSPORTE') or None), + weight_type=weight_type or WeightUnit.KGS, + seal_number=(row_norm.get('PRECINTO') or None), + incoterm=(row_norm.get('CLAVE INCOTERM') or None), + entry_exit_date=parse_date(row_norm.get('FECHA EMISION'), date_format), + tenant_id=tenant_id, + company_id=company_id, + ) + + header.compliance_mx = compliance + header.financials = financials + if logistics: + header.logistics = logistics + + headers_to_insert.append(header) + + elif model_target == 'invoice_details': + invoice_number = (row_norm.get('NUMERO FACTURA') or row_norm.get('NUM FACTURA') or '').strip() + if not invoice_number: + skipped_invalid += 1 + continue + + if invoice_number in invoice_id_cache: + invoice_id = invoice_id_cache[invoice_number] + else: + invoice_id = ( + session.query(InvoiceHeader.id) + .filter( + InvoiceHeader.tenant_id == tenant_id, + InvoiceHeader.company_id == company_id, + InvoiceHeader.invoice_number == invoice_number, + ) + .scalar() + ) + invoice_id_cache[invoice_number] = invoice_id + + if not invoice_id: + logger.warning( + "Invoice not found for details row %s (invoice_number=%s)", + i, + invoice_number, + ) + skipped_missing_invoice += 1 + continue + + # --- Prevent Duplicates: Clear existing items for this invoice (Once per job) --- + if invoice_id not in cleared_invoices: + logger.info(f"Clearing existing details for Invoice {invoice_number} (ID: {invoice_id}) to prevent duplicates") + + # 1. Delete Items (Cascades to LineItem, LineFinancial, etc. if DB configured, check models) + # Checking Item model, we usually need to be careful. + # Assuming Cascade delete is set up on FKs or we rely on ORM cascade if using relationships. + # Here we use bulk delete. + session.query(Item).filter(Item.invoice_id == invoice_id).delete(synchronize_session=False) + + # 2. Delete InvoiceSalesDetails + session.query(InvoiceSalesDetails).filter(InvoiceSalesDetails.invoice_id == invoice_id).delete(synchronize_session=False) + + cleared_invoices.add(invoice_id) + + # --- NEW LOGIC: Expanded Anexo 76 Structure --- + + # A. Find/Cache Part + part_num = (row_norm.get('NUMPARTE') or row_norm.get('NUMERO PARTE') or '').strip() + part_id = None + if part_num: + part_id = part_cache.get(part_num) + if part_id is None: + p = session.query(Part.id).filter( + Part.part_number == part_num, + Part.tenant_id == tenant_id, + Part.company_id == company_id + ).first() + if p: + part_id = p.id + part_cache[part_num] = part_id + + line_num_val = (row_norm.get('LINEA') or row_norm.get('RENGLON') or row_norm.get('PARTIDA')) + line_num = parse_int(line_num_val) or (len(details_to_insert) + 1) + + # 1. Parent Item + item = Item( + invoice_id=invoice_id, + tenant_id=tenant_id, + company_id=company_id, + item_type="N", # Default to Normal + system_origin="CSV" + ) + session.add(item) + session.flush() # Need item.id + + # 2. Main Line + line = LineItem( + item_id=item.id, + line_number=line_num, + part_number=part_id, + tenant_id=tenant_id, + company_id=company_id + ) + session.add(line) + session.flush() # Need line.id + + # 3. Financial Data + price = parse_decimal(row_norm.get('PRECIO UNITARIO') or row_norm.get('PRECIOUNITARIO')) + val_com = parse_decimal(row_norm.get('VALOR COMERCIAL') or row_norm.get('VALORCOMERCIAL')) + qty = parse_decimal(row_norm.get('CANTIDAD')) + + session.add(LineFinancial( + item_line_id=line.id, + unit_price=price, + commercial_value=val_com or (price * qty if price and qty else None), + )) + + # 4. Quantities + if qty: + session.add(LineQuantity( + item_line_id=line.id, + quantity=qty, + )) + + # 5. Customs/Fraction + origin = row_norm.get('PAIS ORIGEN') or row_norm.get('PAISORIGEN') + fraction = row_norm.get('FRACCION') + if origin or fraction: + session.add(LineCustom( + item_line_id=line.id, + fraction=fraction, + origin_country=origin, + )) + + # 6. Description + desc = row_norm.get('DESCRIPCION') + if desc: + session.add(LineDescription( + item_line_id=line.id, + description_spanish=desc, + )) + + # 7. Legacy Sales Details (For specific audit/UI fields) + detail = InvoiceSalesDetails( + invoice_id=invoice_id, + line_number=line_num, + sales_order=(row_norm.get('ORDEN DE COMPRA') or row_norm.get('ORDENCOMPRA') or None), + line_bundles=parse_int(row_norm.get('CANTIDAD BULTOS') or row_norm.get('CANTIDADBULTOS')), + tenant_id=tenant_id, + company_id=company_id, + ) + session.add(detail) + details_to_insert.append(item) # Use as counter/ref + + # 3. Bulk Insert (ORM Transaction) + try: + if model_target == 'invoice_header': + if headers_to_insert: + logger.info(f"Attempting to commit {len(headers_to_insert)} headers") + session.add_all(headers_to_insert) + session.commit() + inserted_count = len(headers_to_insert) + logger.info(f"Headers commit successful. Inserted: {inserted_count}") + else: + logger.warning(f"No headers to insert for job {job_id}") + else: + if details_to_insert: + logger.info(f"Attempting to commit {len(details_to_insert)} items and related data") + session.commit() # Everything was already added with session.add() + inserted_count = len(details_to_insert) + logger.info(f"Details commit successful. Inserted: {inserted_count}") + else: + logger.warning(f"No details to insert for job {job_id}") + + except Exception as db_err: + session.rollback() + logger.error(f"DB Error during {model_target} commit: {db_err}") + import traceback + logger.error(traceback.format_exc()) + return {"status": "failed", "error": str(db_err)} + + # 4. Determine final status and prepare response (inside session block to access variables) + total_skipped = skipped_invalid + skipped_missing_fk + skipped_missing_invoice + + # Log summary + logger.info(f"Job {job_id} completed. Inserted: {inserted_count}, Skipped: {total_skipped} " + f"(invalid: {skipped_invalid}, missing_fk: {skipped_missing_fk}, missing_invoice: {skipped_missing_invoice})") + + # Prepare response based on results + if inserted_count == 0: + if total_skipped > 0: + logger.warning(f"No valid records to insert for job {job_id}. All {total_skipped} records were rejected.") + response = { + "status": "warning", + "inserted": 0, + "skipped_invalid": skipped_invalid, + "skipped_missing_invoice": skipped_missing_invoice, + "skipped_missing_fk": skipped_missing_fk, + "skipped_details": skipped_fk_details, + "message": f"No se insertaron registros. {total_skipped} fueron rechazados." + } + else: + logger.error(f"No valid records found in CSV for job {job_id}") + response = { + "status": "failed", + "error": "No hay registros válidos en el archivo CSV", + "inserted": 0, + "skipped_invalid": skipped_invalid, + "skipped_missing_invoice": skipped_missing_invoice, + "skipped_missing_fk": skipped_missing_fk, + "skipped_details": skipped_fk_details + } + else: + # Success case - at least some records were inserted + response = { + "status": "finished", + "inserted": inserted_count, + "skipped_invalid": skipped_invalid, + "skipped_missing_invoice": skipped_missing_invoice, + "skipped_missing_fk": skipped_missing_fk, + "skipped_details": skipped_fk_details + } + + except Exception as e: + logger.error(f"Task failed: {e}") + import traceback + logger.error(traceback.format_exc()) + return {"status": "failed", "error": str(e)} + + # 5. Cleanup + try: + if os.path.exists(file_path): + os.remove(file_path) + if os.path.exists(error_path): + os.remove(error_path) + except: + logger.warning("Failed to cleanup temp files") + + # Ensure response is defined (fallback in case of unexpected errors) + if response is None: + logger.error(f"Unexpected error: response not set for job {job_id}") + response = { + "status": "failed", + "error": "Error inesperado durante el procesamiento", + "inserted": 0, + "skipped_invalid": skipped_invalid, + "skipped_missing_invoice": skipped_missing_invoice, + "skipped_missing_fk": skipped_missing_fk, + "skipped_details": skipped_fk_details + } + + return response diff --git a/backend/api/v1/modules/a76/invoice_settings/dto.py b/backend/api/v1/modules/a76/invoice_settings/dto.py index 07c954a8..d330bf29 100644 --- a/backend/api/v1/modules/a76/invoice_settings/dto.py +++ b/backend/api/v1/modules/a76/invoice_settings/dto.py @@ -2,13 +2,7 @@ from typing import Any, Dict, Optional from pydantic import BaseModel, ConfigDict from enum import Enum -class OperationType(str, Enum): - IMP = "imp" # Importación - EXP = "exp" # Exportación - SM_IN = "sm_in" # Entrada SM - SM_OUT = "sm_out" # Salida SM - CTM_SEND = "ctm_send" # Envío CTM - CTM_RECEIVE = "ctm_receive" # Recibo CTM +from .models import OperationType class InvoiceSettingsBase(BaseModel): invoice_type: str diff --git a/backend/api/v1/modules/a76/invoice_settings/routes.py b/backend/api/v1/modules/a76/invoice_settings/routes.py index 07e37459..9a6f83c3 100644 --- a/backend/api/v1/modules/a76/invoice_settings/routes.py +++ b/backend/api/v1/modules/a76/invoice_settings/routes.py @@ -40,8 +40,7 @@ def get_invoice_settings( tenant_id=tenant_id, company_id=company_id ) - - return settings + return InvoiceSettingsResponse.model_validate(settings) @router.get("/", response_model=List[InvoiceSettingsResponse]) def list_invoice_settings( diff --git a/backend/api/v1/modules/a76/invoice_settings/services.py b/backend/api/v1/modules/a76/invoice_settings/services.py index 3499a700..996fcac7 100644 --- a/backend/api/v1/modules/a76/invoice_settings/services.py +++ b/backend/api/v1/modules/a76/invoice_settings/services.py @@ -17,7 +17,7 @@ def get_settings( InvoiceSettings.tenant_id == tenant_id, InvoiceSettings.company_id == company_id, InvoiceSettings.invoice_type == invoice_type, - InvoiceSettings.operation_type == operation_type + InvoiceSettings.operation_type == operation_type.value ) return db.execute(stmt).scalar_one_or_none() @@ -60,7 +60,7 @@ def upsert_settings( tenant_id=tenant_id, company_id=company_id, invoice_type=settings_data.invoice_type, - operation_type=settings_data.operation_type, + operation_type=settings_data.operation_type.value, settings=settings_data.settings ) diff --git a/backend/api/v1/modules/a76/invoices/catalog_service.py b/backend/api/v1/modules/a76/invoices/catalog_service.py index 9ad64b0b..2dee90a7 100644 --- a/backend/api/v1/modules/a76/invoices/catalog_service.py +++ b/backend/api/v1/modules/a76/invoices/catalog_service.py @@ -134,12 +134,14 @@ class InvoiceCatalogService: # Drivers try: - drivers, _ = DriverService.get_all(db, tenant_id, company_id, limit=1000) + drivers = DriverService.list_drivers(db, str(company_id), str(tenant_id)) response.drivers = [ DriverResponseDTO.model_validate(d) for d in drivers ] except Exception as e: print(f"Error fetching drivers: {e}") + # Initialize drivers as empty list if an error occurs + drivers = [] # Trailers try: diff --git a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/common.py b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/common.py index 90386af6..a690343d 100644 --- a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/common.py +++ b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/common.py @@ -7,7 +7,7 @@ from api.v1.modules.a76.clients_and_providers.models import ClientProvider from api.v1.modules.a76.customs_brokers.models import CustomsBroker from api.v1.modules.public.reference_data.incoterms.models import Incoterm from ....models import InvoiceComplianceMx -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.public.reference_data.currency_types.models import CurrencyType from api.v1.modules.public.reference_data.customs_sections.models import CustomsSection from ....models import TransportType, Currency, WeightUnit @@ -435,11 +435,11 @@ def validate_common( # Only check for existing items during update operations (when invoice has an id) if hasattr(invoice, "id"): has_items = ( - db.query(Item) + db.query(LineItem) .filter( - Item.invoice_id == invoice.id, - Item.tenant_id == tenant_id, - Item.company_id == company_id, + LineItem.invoice_id == invoice.id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, ) .first() ) diff --git a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py index 9c254a9b..ac85ff24 100644 --- a/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py +++ b/backend/api/v1/modules/a76/invoices/imports/temporary/validators/update.py @@ -36,17 +36,17 @@ def validate_update( # Validar campos requeridos según el tipo de operación invoice_dict = { - 'provider_id': invoice_data.compliance_mx.provider_id if invoice_data.compliance_mx else None, - 'sold_to_id': invoice_data.compliance_mx.sold_to_id if invoice_data.compliance_mx else None, - 'sold_to_header': invoice_data.compliance_mx.sold_to_header if invoice_data.compliance_mx else None, - 'shipped_to_id': invoice_data.compliance_mx.shipped_to_id if invoice_data.compliance_mx else None, - 'customs_broker_id': invoice_data.compliance_mx.customs_broker_id if invoice_data.compliance_mx else None, - 'pedimento_id': invoice_data.compliance_mx.pedimento_id if invoice_data.compliance_mx else None, + 'provider_id': invoice_data.compliance_mx.provider_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None), + 'sold_to_id': invoice_data.compliance_mx.sold_to_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None), + 'sold_to_header': invoice_data.compliance_mx.sold_to_header if invoice_data.compliance_mx else (existing_invoice.compliance_mx.sold_to_header if existing_invoice.compliance_mx else None), + 'shipped_to_id': invoice_data.compliance_mx.shipped_to_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None), + 'customs_broker_id': invoice_data.compliance_mx.customs_broker_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None), + 'pedimento_id': invoice_data.compliance_mx.pedimento_id if invoice_data.compliance_mx else (existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None), } validate_required_fields_by_operation( invoice_data=invoice_dict, - operation_type=invoice_data.operation_type or 'IMP', + operation_type=invoice_data.operation_type or (existing_invoice.operation_type or 'imp'), errors=errors ) @@ -57,34 +57,36 @@ def validate_update( # Siguiendo la lógica del código Clarion original # Columna A: Pedimento (si no viene en CSV, usar el existente) - if invoice_data.compliance_mx.pedimento_id: - invoice_data.compliance_mx.pedimento_id = invoice_data.compliance_mx.pedimento_id - else: - invoice_data.compliance_mx.pedimento_id = existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.pedimento_id: + invoice_data.compliance_mx.pedimento_id = invoice_data.compliance_mx.pedimento_id + else: + invoice_data.compliance_mx.pedimento_id = existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None # Columna B: Remesa - if invoice_data.compliance_mx.remesa: - invoice_data.compliance_mx.remesa = invoice_data.compliance_mx.remesa - else: - invoice_data.compliance_mx.remesa = existing_invoice.compliance_mx.remesa if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.remesa: + invoice_data.compliance_mx.remesa = invoice_data.compliance_mx.remesa + else: + invoice_data.compliance_mx.remesa = existing_invoice.compliance_mx.remesa if existing_invoice.compliance_mx else None # Columna C: Factura (OBLIGATORIO) - invoice_data.invoice_number = clean_str(invoice_data.invoice_number) - if not invoice_data.invoice_number: - errors.add_required_error("invoice_number") + if invoice_data.invoice_number is not None: + invoice_data.invoice_number = clean_str(invoice_data.invoice_number) + if not invoice_data.invoice_number: + errors.add_required_error("invoice_number") + else: + invoice_data.invoice_number = existing_invoice.invoice_number # Columna D: Fecha - if invoice_data.invoice_date: - invoice_data.invoice_date = invoice_data.invoice_date - else: + if not invoice_data.invoice_date: invoice_data.invoice_date = existing_invoice.invoice_date # Columna E: Tipo Cambio - if invoice_data.financials and invoice_data.financials.exchange_rate is not None: - invoice_data.financials.exchange_rate = invoice_data.financials.exchange_rate - else: - if existing_invoice.financials: - invoice_data.financials.exchange_rate = existing_invoice.financials.exchange_rate + if invoice_data.financials: + if invoice_data.financials.exchange_rate is None: + if existing_invoice.financials: + invoice_data.financials.exchange_rate = existing_invoice.financials.exchange_rate # Columna F: Régimen if invoice_data.document_type: @@ -93,157 +95,161 @@ def validate_update( invoice_data.document_type = existing_invoice.document_type # Columna G: Clave Proveedor - if invoice_data.compliance_mx and invoice_data.compliance_mx.provider_id is not None: - invoice_data.compliance_mx.provider_id = invoice_data.compliance_mx.provider_id - else: - invoice_data.compliance_mx.provider_id = existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.provider_id is None: + invoice_data.compliance_mx.provider_id = existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None # Columna H: Clave Vendido A - if invoice_data.compliance_mx and invoice_data.compliance_mx.sold_to_id is not None: - invoice_data.compliance_mx.sold_to_id = invoice_data.compliance_mx.sold_to_id - else: - invoice_data.compliance_mx.sold_to_id = existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.sold_to_id is None: + invoice_data.compliance_mx.sold_to_id = existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None # Columna I: Clave Enviado A - if invoice_data.compliance_mx and invoice_data.compliance_mx.shipped_to_id is not None: - invoice_data.compliance_mx.shipped_to_id = invoice_data.compliance_mx.shipped_to_id - else: - invoice_data.compliance_mx.shipped_to_id = existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.shipped_to_id is None: + invoice_data.compliance_mx.shipped_to_id = existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None # Columna J: Clave A. Aduanal - if invoice_data.compliance_mx and invoice_data.compliance_mx.customs_broker_id is not None: - invoice_data.compliance_mx.customs_broker_id = invoice_data.compliance_mx.customs_broker_id - else: - invoice_data.compliance_mx.customs_broker_id = existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if invoice_data.compliance_mx.customs_broker_id is None: + invoice_data.compliance_mx.customs_broker_id = existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None # Columna K: Clave Transportista - if invoice_data.logistics and invoice_data.logistics.carrier_id is not None: - invoice_data.logistics.carrier_id = invoice_data.logistics.carrier_id - else: - invoice_data.logistics.carrier_id = existing_invoice.logistics.carrier_id if existing_invoice.logistics else None + if invoice_data.logistics: + # Note: logistics in update schema seems to be a single object, but in model it's a list. + # This validator seems to expect a single object (InvoiceLogisticsUpdate). + # We'll stick to the existing logic but make it safe. + if hasattr(invoice_data.logistics, 'carrier_id') and invoice_data.logistics.carrier_id is None: + invoice_data.logistics.carrier_id = existing_invoice.logistics.carrier_id if existing_invoice.logistics else None # Columna L: Nombre Conductor - if invoice_data.logistics and invoice_data.logistics.driver_name: - invoice_data.logistics.driver_name = clean_str(invoice_data.logistics.driver_name) - else: - invoice_data.logistics.driver_name = existing_invoice.logistics.driver_name if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'driver_name') and not invoice_data.logistics.driver_name: + invoice_data.logistics.driver_name = existing_invoice.logistics.driver_name if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'driver_name'): + invoice_data.logistics.driver_name = clean_str(invoice_data.logistics.driver_name) # Columna M: Tipo Transporte - if invoice_data.logistics and invoice_data.logistics.transport_type: - invoice_data.logistics.transport_type = clean_str(invoice_data.logistics.transport_type) - else: - invoice_data.logistics.transport_type = existing_invoice.logistics.transport_type if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'transport_type') and not invoice_data.logistics.transport_type: + invoice_data.logistics.transport_type = existing_invoice.logistics.transport_type if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'transport_type'): + invoice_data.logistics.transport_type = clean_str(invoice_data.logistics.transport_type) # Columna N: Número de Transporte - if invoice_data.logistics and invoice_data.logistics.transport_num: - invoice_data.logistics.transport_num = clean_str(invoice_data.logistics.transport_num) - else: - invoice_data.logistics.transport_num = existing_invoice.logistics.transport_num if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'transport_num') and not invoice_data.logistics.transport_num: + invoice_data.logistics.transport_num = existing_invoice.logistics.transport_num if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'transport_num'): + invoice_data.logistics.transport_num = clean_str(invoice_data.logistics.transport_num) # Columna O: Tipo de Moneda - if invoice_data.financials and invoice_data.financials.currency: - invoice_data.financials.currency = clean_str(invoice_data.financials.currency).lower() - else: - invoice_data.financials.currency = existing_invoice.financials.currency if existing_invoice.financials else None + if invoice_data.financials: + if not invoice_data.financials.currency: + invoice_data.financials.currency = existing_invoice.financials.currency if existing_invoice.financials else None + else: + invoice_data.financials.currency = clean_str(invoice_data.financials.currency).lower() # Columna P: Clave Moneda - if invoice_data.financials and invoice_data.financials.currency_type: - invoice_data.financials.currency_type = clean_str(invoice_data.financials.currency_type).upper() - else: - invoice_data.financials.currency_type = existing_invoice.financials.currency_type if existing_invoice.financials else None + if invoice_data.financials: + if not invoice_data.financials.currency_type: + invoice_data.financials.currency_type = existing_invoice.financials.currency_type if existing_invoice.financials else None + else: + invoice_data.financials.currency_type = clean_str(invoice_data.financials.currency_type).upper() # Columna Q: Flete - if invoice_data.financials and invoice_data.financials.freight is not None: - invoice_data.financials.freight = invoice_data.financials.freight - else: - invoice_data.financials.freight = existing_invoice.financials.freight if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.freight is None: + invoice_data.financials.freight = existing_invoice.financials.freight if existing_invoice.financials else None # Columna R: Val Seguros - if invoice_data.financials and invoice_data.financials.insurance_value is not None: - invoice_data.financials.insurance_value = invoice_data.financials.insurance_value - else: - invoice_data.financials.insurance_value = existing_invoice.financials.insurance_value if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.insurance_value is None: + invoice_data.financials.insurance_value = existing_invoice.financials.insurance_value if existing_invoice.financials else None # Columna S: Seguros - if invoice_data.financials and invoice_data.financials.insurance is not None: - invoice_data.financials.insurance = invoice_data.financials.insurance - else: - invoice_data.financials.insurance = existing_invoice.financials.insurance if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.insurance is None: + invoice_data.financials.insurance = existing_invoice.financials.insurance if existing_invoice.financials else None # Columna T: Embalaje - if invoice_data.financials and invoice_data.financials.packaging is not None: - invoice_data.financials.packaging = invoice_data.financials.packaging - else: - invoice_data.financials.packaging = existing_invoice.financials.packaging if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.packaging is None: + invoice_data.financials.packaging = existing_invoice.financials.packaging if existing_invoice.financials else None # Columna U: Otros Incrementables - if invoice_data.financials and invoice_data.financials.other_increments is not None: - invoice_data.financials.other_increments = invoice_data.financials.other_increments - else: - invoice_data.financials.other_increments = existing_invoice.financials.other_increments if existing_invoice.financials else None + if invoice_data.financials: + if invoice_data.financials.other_increments is None: + invoice_data.financials.other_increments = existing_invoice.financials.other_increments if existing_invoice.financials else None # Columna V: Incoterms - if invoice_data.logistics and invoice_data.logistics.incoterm: - invoice_data.logistics.incoterm = clean_str(invoice_data.logistics.incoterm).upper() - else: - invoice_data.logistics.incoterm = existing_invoice.logistics.incoterm if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'incoterm') and not invoice_data.logistics.incoterm: + invoice_data.logistics.incoterm = existing_invoice.logistics.incoterm if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'incoterm'): + invoice_data.logistics.incoterm = clean_str(invoice_data.logistics.incoterm).upper() # Columna W: Precinto - if invoice_data.logistics and invoice_data.logistics.seal_number: - invoice_data.logistics.seal_number = clean_str(invoice_data.logistics.seal_number) - else: - invoice_data.logistics.seal_number = existing_invoice.logistics.seal_number if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'seal_number') and not invoice_data.logistics.seal_number: + invoice_data.logistics.seal_number = existing_invoice.logistics.seal_number if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'seal_number'): + invoice_data.logistics.seal_number = clean_str(invoice_data.logistics.seal_number) # Columna X: Fecha de Emisión - if invoice_data.emission_date: - invoice_data.emission_date = invoice_data.emission_date - else: + if not invoice_data.emission_date: invoice_data.emission_date = existing_invoice.emission_date # Columna Y: Tipo de Peso (Opcional) - if invoice_data.logistics and invoice_data.logistics.weight_type: - invoice_data.logistics.weight_type = clean_str(invoice_data.logistics.weight_type).upper() - else: - invoice_data.logistics.weight_type = existing_invoice.logistics.weight_type if existing_invoice.logistics else None + if invoice_data.logistics: + if hasattr(invoice_data.logistics, 'weight_type') and not invoice_data.logistics.weight_type: + invoice_data.logistics.weight_type = existing_invoice.logistics.weight_type if existing_invoice.logistics else None + elif hasattr(invoice_data.logistics, 'weight_type'): + invoice_data.logistics.weight_type = clean_str(invoice_data.logistics.weight_type).upper() # Columna Z: E-Document (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.edocument: - invoice_data.compliance_mx.edocument = clean_str(invoice_data.compliance_mx.edocument) - else: - invoice_data.compliance_mx.edocument = existing_invoice.compliance_mx.edocument if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.edocument: + invoice_data.compliance_mx.edocument = existing_invoice.compliance_mx.edocument if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.edocument = clean_str(invoice_data.compliance_mx.edocument) # Columna AA: Num. Operación (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.vucem_operation_num: - invoice_data.compliance_mx.vucem_operation_num = clean_str(invoice_data.compliance_mx.vucem_operation_num) - else: - invoice_data.compliance_mx.vucem_operation_num = existing_invoice.compliance_mx.vucem_operation_num if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.vucem_operation_num: + invoice_data.compliance_mx.vucem_operation_num = existing_invoice.compliance_mx.vucem_operation_num if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.vucem_operation_num = clean_str(invoice_data.compliance_mx.vucem_operation_num) # Columna AB: Aduana (OBLIGATORIO) - if invoice_data.compliance_mx and invoice_data.compliance_mx.aduana: - invoice_data.compliance_mx.aduana = clean_str(invoice_data.compliance_mx.aduana) - else: - invoice_data.compliance_mx.aduana = existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.aduana: + invoice_data.compliance_mx.aduana = existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.aduana = clean_str(invoice_data.compliance_mx.aduana) # Validar que aduana sea obligatorio (excepto para MEX) if existing_invoice.invoice_type != "MEX": - if not invoice_data.compliance_mx or not invoice_data.compliance_mx.aduana: + current_aduana = invoice_data.compliance_mx.aduana if invoice_data.compliance_mx else (existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None) + if not current_aduana: errors.add_required_error("aduana") # Columna AC: Sección de Despacho / Puerto de Entrada (Opcional) - if invoice_data.compliance_mx and invoice_data.compliance_mx.port_of_entry: - invoice_data.compliance_mx.port_of_entry = clean_str(invoice_data.compliance_mx.port_of_entry) - else: - invoice_data.compliance_mx.port_of_entry = existing_invoice.compliance_mx.port_of_entry if existing_invoice.compliance_mx else None + if invoice_data.compliance_mx: + if not invoice_data.compliance_mx.port_of_entry: + invoice_data.compliance_mx.port_of_entry = existing_invoice.compliance_mx.port_of_entry if existing_invoice.compliance_mx else None + else: + invoice_data.compliance_mx.port_of_entry = clean_str(invoice_data.compliance_mx.port_of_entry) # Columna AD: Observación en Español (Opcional) - if invoice_data.observation_es: - invoice_data.observation_es = clean_str(invoice_data.observation_es) - else: + if not invoice_data.observation_es: invoice_data.observation_es = existing_invoice.observation_es + else: + invoice_data.observation_es = clean_str(invoice_data.observation_es) # Columna AD: Observación en Inglés (Opcional) - if invoice_data.observation_en: - invoice_data.observation_en = clean_str(invoice_data.observation_en) - else: + if not invoice_data.observation_en: invoice_data.observation_en = existing_invoice.observation_en + else: + invoice_data.observation_en = clean_str(invoice_data.observation_en) diff --git a/backend/api/v1/modules/a76/invoices/schemas.py b/backend/api/v1/modules/a76/invoices/schemas.py index c658e9ae..f117377e 100644 --- a/backend/api/v1/modules/a76/invoices/schemas.py +++ b/backend/api/v1/modules/a76/invoices/schemas.py @@ -123,7 +123,7 @@ class InvoiceComplianceMxBase(BaseModel): None, max_length=20, description="Shipped by header" ) shipped_by_id: Optional[int] = Field(None, description="Shipped by ID") - customs_broker_id: Optional[int] = Field(None, description="Customs broker ID") + customs_broker_id: int = Field(None, description="Customs broker ID") customs_broker_us_id: Optional[int] = Field( None, description="US customs broker ID" ) @@ -144,7 +144,7 @@ class InvoiceComplianceMxBase(BaseModel): ) value_method: Optional[str] = Field(None, max_length=2, description="Value method") act_value: Optional[str] = Field(None, max_length=5, description="Act value") - is_pedimento_pending: bool = Field(..., description="Is pedimento pending") + is_pedimento_pending: Optional[bool] = Field(False, description="Is pedimento pending") is_owner_of_goods: Optional[bool] = Field(False, description="Is owner of goods") generate_balances: Optional[bool] = Field(False, description="Generate balances") was_reviewed_by_company: Optional[bool] = Field( diff --git a/backend/api/v1/modules/a76/invoices/services.py b/backend/api/v1/modules/a76/invoices/services.py index f3b0681b..f232366d 100644 --- a/backend/api/v1/modules/a76/invoices/services.py +++ b/backend/api/v1/modules/a76/invoices/services.py @@ -1,7 +1,9 @@ import traceback from typing import Optional, List, Tuple from sqlalchemy.orm import Session +from sqlalchemy import func from core.exceptions import ErrorCollector, DuplicateResourceException +from core.context import get_user_context from .common.mappers import clean_dict from .imports.temporary.validators.create import validate_create from .imports.temporary.validators.update import validate_update @@ -10,6 +12,26 @@ from .common.common_validators import invoice_exists from . import models, schemas +def _get_current_username() -> str: + """Helper to get current username from context or fallback to System""" + try: + context = get_user_context() + if context: + # Token usually has 'preferred_username' or 'name' or 'sub' + username = ( + context.get("preferred_username") + or context.get("email") + or context.get("sub") + or "System" + ) + print(f"DEBUG: _get_current_username found context: {username}") + return username + except Exception: + pass + print("DEBUG: _get_current_username NO context found, using System") + return "System" + + class InvoiceService: """Service for Invoice Header operations""" @@ -46,7 +68,7 @@ class InvoiceService: # Apply filters if provided if filters: if filters.get("status"): - query = query.filter(models.InvoiceHeader.status == filters["status"]) + query = query.filter(models.InvoiceHeader.is_updated == filters["status"]) if filters.get("operation_type"): query = query.filter( models.InvoiceHeader.operation_type == filters["operation_type"] @@ -129,6 +151,11 @@ class InvoiceService: invoice_dict["tenant_id"] = tenant_id invoice_dict["company_id"] = company_id + # Automatic status and audit fields + username = _get_current_username() + invoice_dict["capture_user"] = username + invoice_dict["who_updated"] = username + # Ensure document_type respects DB constraints for MEX invoices (bypass clean_dict) if invoice_dict.get("invoice_type") == "MEX" and not invoice_dict.get("document_type"): invoice_dict["document_type"] = None @@ -253,6 +280,7 @@ class InvoiceService: # Update main invoice header fields update_dict = invoice_data.model_dump( exclude={ + "id", "compliance_mx", "financials", "logistics", @@ -264,8 +292,19 @@ class InvoiceService: for key, value in update_dict.items(): setattr(invoice, key, value) + # Audit update fields + username = _get_current_username() + invoice.who_updated = username + invoice.updated_date = func.now() + + # Backfill capture_user if missing or previous generic 'System' + if not invoice.capture_user or invoice.capture_user == "System": + if username != "System": + invoice.capture_user = username + # Update compliance_mx if provided if invoice_data.compliance_mx is not None: + print(f"DEBUG: 更新 compliance_mx para factura {invoice.id}: {invoice_data.compliance_mx}") if invoice.compliance_mx: for key, value in invoice_data.compliance_mx.model_dump( exclude_unset=True diff --git a/backend/api/v1/modules/a76/items/__init__.py b/backend/api/v1/modules/a76/items/__init__.py index a66bfe89..42d7abcf 100644 --- a/backend/api/v1/modules/a76/items/__init__.py +++ b/backend/api/v1/modules/a76/items/__init__.py @@ -4,16 +4,14 @@ Items module - Annex 76 Compliance # Import models in correct order to avoid circular dependencies # LineItem must be imported before models that reference it -from .line_items.models import LineItem from .line_financials.models import LineFinancial from .line_quantities.models import LineQuantity from .line_customs.models import LineCustom from .line_descriptions.models import LineDescription from .line_references.models import LineReference -from .models import Item, CTMReceipt, SubassemblyEntry +from .models import LineItem, CTMReceipt, SubassemblyEntry __all__ = [ - "Item", "LineItem", "LineFinancial", "LineQuantity", diff --git a/backend/api/v1/modules/a76/items/common/common_validators.py b/backend/api/v1/modules/a76/items/common/common_validators.py index 06e0b449..4397f4fd 100644 --- a/backend/api/v1/modules/a76/items/common/common_validators.py +++ b/backend/api/v1/modules/a76/items/common/common_validators.py @@ -1,6 +1,6 @@ from sqlalchemy import func from core.exceptions import ErrorCollector -from ..line_items import models +from .. import models from sqlalchemy.orm import Session @@ -21,11 +21,11 @@ def item_exists(db: Session, item_line: int, tenant_id: int, company_id: int): def count_items(db: Session, invoice_id: int, tenant_id: int, company_id: int): count = ( db.query(func.count()) - .select_from(models.Item) + .select_from(models.LineItem) .filter( - models.Item.invoice_id == invoice_id, - models.Item.tenant_id == tenant_id, - models.Item.company_id == company_id, + models.LineItem.invoice_id == invoice_id, + models.LineItem.tenant_id == tenant_id, + models.LineItem.company_id == company_id, ) .scalar() ) diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py new file mode 100644 index 00000000..7bc9c5af --- /dev/null +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/calculations.py @@ -0,0 +1,79 @@ +from sqlalchemy.orm import Session +from api.v1.modules.a76.invoices.models import InvoiceFinancials, InvoiceHeader, InvoiceLogistics +from core.exceptions import ErrorCollector + +from ....models import LineItem +from ....line_financials.models import LineFinancial +from ....line_financials.schemas import LineFinancialCreate +from ....line_quantities.models import LineQuantity +from ....line_quantities.schemas import LineQuantityCreate +from ....line_customs.models import LineCustom +from ....line_customs.schemas import LineCustomCreate +from ....line_descriptions.models import LineDescription +from ....line_descriptions.schemas import LineDescriptionCreate +from ....line_references.models import LineReference +from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem +from ....models import LineItem +from api.v1.modules.a76.classes.models import Class + + +def apply_calculations( + db: Session, line: LineItem, tenant_id: int, company_id: int, line_number: int +): + #TODO: SSisGen Logic + # if ssisgen.calcularcostounitarioenbaseavalortotalscaf = 1: + # unit_cost_capture = line.financial.total_value / line.financial.total_value <-- habria que revisar por que esta asi, por que para mi no tiene sentido, pero es lo que esta en clarion + caluclate_values(db, line, tenant_id, company_id) + + if not line.fa_data.is_subitem: + line.fa_data.subitem_number = None + + invoice_date = db.query(InvoiceHeader.invoice_date).filter(InvoiceHeader.id == line.invoice_id, InvoiceHeader.tenant_id == tenant_id, InvoiceHeader.company_id == company_id).scalar() + + line.depreciation_date = invoice_date + + if (not line.description.description_spanish and not line.description.description_english) and (line.part_info.description_spanish and line.part_info.description_english): + line.description.description_spanish = line.part_info.description_spanish + line.description.description_english = line.part_info.description_english + else: + if not line.description.description_spanish: + class_desc = ( + db.query(Class.description_es, Class.description_en) + .filter(Class.id == line.class_id, Class.tenant_id == tenant_id, Class.company_id == company_id) + .first() + ) + if class_desc: + line.description.description_spanish, line.description.description_english = class_desc + + +def caluclate_values( + db: Session, line: LineItem, tenant_id: int, company_id: int +): + result = ( + db.query(InvoiceFinancials.currency, InvoiceFinancials.exchange_rate) + .filter(InvoiceFinancials.invoice_id == line.invoice_id, InvoiceFinancials.tenant_id == tenant_id, InvoiceFinancials.company_id == company_id) + .first() + ) + if not result: + return + + currency, exchange_rate = result + + if currency == "foreign": + line.financial.unit_cost_usd = line.financial.unit_cost_capture + line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity + line.financial.unit_cost_mxn = line.financial.unit_cost_capture * exchange_rate + line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity + line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity + elif currency == "local": + line.financial.unit_cost_mxn = line.financial.unit_cost_capture + line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity + line.financial.unit_cost_usd = line.financial.unit_cost_capture / exchange_rate + line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity + line.financial.value_mc = line.financial.unit_cost_usd * line.quantity.quantity + elif currency == "manual": + line.financial.unit_cost_usd = line.financial.unit_cost_capture/exchange_rate + line.financial.value_usd = line.financial.unit_cost_usd * line.quantity.quantity + line.financial.unit_cost_mxn = line.financial.unit_cost_usd * exchange_rate + line.financial.value_mxn = line.financial.unit_cost_mxn * line.quantity.quantity + line.financial.value_mc = line.financial.unit_cost_capture * line.quantity.quantity \ No newline at end of file diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py index 3cbe5958..f1600bff 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/common.py @@ -6,8 +6,7 @@ from sqlalchemy import func from ....common.fractions import search_fraction_preference from ....common.common_validators import item_exists -from ....models import Item -from ....line_items.models import LineItem +from ....models import LineItem from ....line_customs.models import FractionType, LineCustom from api.v1.modules.a76.items.schemas import LineItemCreate from api.v1.modules.a76.invoices.models import InvoiceHeader @@ -26,21 +25,13 @@ from api.v1.modules.a76.general_catalogs.company.models import Company def validate_common( db: Session, line: LineItemCreate, - invoice_id: int, # Para creación, se pasa directamente; para update, se consulta del item tenant_id: int, company_id: int, errors: ErrorCollector, line_number: int, ): - # Para updates, line.item_id existe; para creates, es None - item_header = None - if line.item_id: - item_header = db.query(Item).filter(Item.id == line.item_id).first() - if item_header: - invoice_id = item_header.invoice_id - invoice: InvoiceHeader = invoice_exists_by_id( - db, invoice_id, tenant_id, company_id, errors + db, line.invoice_id, tenant_id, company_id, errors ) line_item: LineItem = item_exists(db, line.line_number, tenant_id, company_id) @@ -164,7 +155,7 @@ def validate_common( code="PACKAGE_QUANTITY_MUST_BE_GREATER_THAN_ZERO", ) else: - if (line.quantity.package_quantity or line.quantity.package_quantity > 0) and not line.quantity.package_id: + if line.quantity.package_quantity and (line.quantity.package_quantity > 0 and not line.quantity.package_id): errors.add_error( field=f"line[{line_number}].quantity.package_id", message="El paquete es obligatorio cuando se proporciona la cantidad de paquetes.", @@ -301,8 +292,8 @@ def validate_common( code="AMERICAN_FRACTION_NOT_FOUND", ) - if item_header and item_header.order: - if len(item_header.order) > 20: + if line.order: + if len(line.order) > 20: errors.add_error( field=f"item.order", message="El campo orden no debe exceder los 20 caracteres.", diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py index 66024a5e..677df0ed 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/create.py @@ -4,7 +4,7 @@ from sqlalchemy.orm import Session from ....common.common_validators import count_items from core.exceptions import ErrorCollector -from ....line_items.models import LineItem +from ....models import LineItem from ....line_financials.models import LineFinancial from ....line_financials.schemas import LineFinancialCreate from ....line_quantities.models import LineQuantity @@ -15,7 +15,7 @@ from ....line_descriptions.models import LineDescription from ....line_descriptions.schemas import LineDescriptionCreate from ....line_references.models import LineReference from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem -from ....models import Item +from ....models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader from api.v1.modules.a76.classes.models import Class from api.v1.modules.a76.general_catalogs.packages.models import Package @@ -27,8 +27,7 @@ from .common import validate_common def validate_create( db: Session, - line, # LineItemCreate schema (Pydantic) - invoice_id: int, # Passed from service + line: LineItem, # LineItemCreate schema (Pydantic) tenant_id: int, company_id: int, errors: ErrorCollector, @@ -42,16 +41,7 @@ def validate_create( line: LineItemCreate schema with nested data (financial, quantity, customs, etc.) invoice_id: ID of the invoice this line belongs to fa_data: FaLineItemCreateDTO or None (None for INV system) - """ - # Inicializar nested schemas si no existen (para poder validar y modificar) - if not line.financial: - line.financial = LineFinancialCreate() - if not line.quantity: - line.quantity = LineQuantityCreate() - if not line.customs: - line.customs = LineCustomCreate() - if not line.description: - line.description = LineDescriptionCreate() + """ # Access fa_data safely fa_data = getattr(line, "fa_data", None) @@ -101,8 +91,8 @@ def validate_create( principal_item_exists = db.query( exists().where( (LineItem.id == FaLineItem.id) - & (LineItem.item_id == Item.id) - & (Item.invoice_id == invoice_id) + & (LineItem.id == LineItem.id) + & (LineItem.invoice_id == line.invoice_id) & (LineItem.line_number == line_number) & (FaLineItem.is_subitem == False) & (FaLineItem.contains_subitems == True) @@ -131,14 +121,14 @@ def validate_create( code="SUBITEM_NUMBER_INVALID", ) - validate_common(db, line, invoice_id, tenant_id, company_id, errors, line_number) + validate_common(db, line, tenant_id, company_id, errors, line_number) if not errors.has_errors(): # Obtener la factura para acceder a tipo de cambio, moneda y peso invoice: InvoiceHeader = ( db.query(InvoiceHeader) .filter( - InvoiceHeader.id == invoice_id, + InvoiceHeader.id == line.invoice_id, InvoiceHeader.tenant_id == tenant_id, InvoiceHeader.company_id == company_id, ) @@ -198,6 +188,23 @@ def validate_create( line.financial.unit_cost_mxn = unit_cost_capture # Si es otro tipo de moneda, dejamos el costo como está + # Calcular valores totales basados en cantidad y costo unitario + quantity = line.quantity.quantity or Decimal("0") + + # Valor Comercial + if line.financial.unit_cost_usd is not None: + line.financial.value_usd = line.financial.unit_cost_usd * quantity + if line.financial.unit_cost_mxn is not None: + line.financial.value_mxn = line.financial.unit_cost_mxn * quantity + + # Valor Aduanas (asumiendo que es igual al Valor Comercial por defecto) + line.financial.customs_value_usd = line.financial.value_usd + line.financial.customs_value_mxn = line.financial.value_mxn + + # Valor MP Temp (Materia Prima Temporal) + line.financial.value_temp_material_usd = line.financial.value_usd + line.financial.value_temp_material_mxn = line.financial.value_mxn + # ========================================== # VALIDAR Y CONVERTIR PESOS NETOS # ========================================== diff --git a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py b/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py index eec6f443..23717f2d 100644 --- a/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py +++ b/backend/api/v1/modules/a76/items/imports/temporary/validators/update.py @@ -3,8 +3,7 @@ from sqlalchemy.orm import Session from api.v1.modules.a76.invoices.common.common_validators import invoice_exists from core.exceptions import ErrorCollector -from ....line_items.models import LineItem -from ....models import Item +from ....models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.models import ( USTariffFraction, @@ -15,8 +14,7 @@ from .common import validate_common def validate_update( db: Session, line: LineItem, - existing_line: LineItem, - invoice_id: int, # Passed from service + existing_line: LineItem, tenant_id: int, company_id: int, errors: ErrorCollector, @@ -26,14 +24,14 @@ def validate_update( Validar y procesar actualización parcial de línea de importación temporal. Si un campo no se proporciona, se mantiene el valor existente. """ - validate_common(db, line, invoice_id, tenant_id, company_id, errors, line_number) + validate_common(db, line, tenant_id, company_id, errors, line_number) if not errors.has_errors(): # Obtener la factura para acceder a tipo de cambio, moneda y peso invoice: InvoiceHeader = ( db.query(InvoiceHeader) .filter( - InvoiceHeader.id == invoice_id, + InvoiceHeader.id == line.invoice_id, InvoiceHeader.tenant_id == tenant_id, InvoiceHeader.company_id == company_id ) @@ -66,6 +64,30 @@ def validate_update( # Costo unitario if line.financial.unit_cost_capture is None: line.financial.unit_cost_capture = existing_line.financial.unit_cost_capture + + # Recalcular valores monetarios si el costo o la cantidad cambian + currency_type = invoice.financials.currency_type + unit_cost_capture = line.financial.unit_cost_capture or Decimal("0") + + if currency_type in ["USD", "ME"]: + line.financial.unit_cost_usd = unit_cost_capture + line.financial.unit_cost_mxn = unit_cost_capture * exchange_rate + elif currency_type in ["MXN", "MN"]: + line.financial.unit_cost_usd = (unit_cost_capture / exchange_rate) if exchange_rate else Decimal("0") + line.financial.unit_cost_mxn = unit_cost_capture + + quantity = line.quantity.quantity if line.quantity.quantity is not None else existing_line.quantity.quantity + + if line.financial.unit_cost_usd is not None: + line.financial.value_usd = line.financial.unit_cost_usd * quantity + if line.financial.unit_cost_mxn is not None: + line.financial.value_mxn = line.financial.unit_cost_mxn * quantity + + line.financial.customs_value_usd = line.financial.value_usd + line.financial.customs_value_mxn = line.financial.value_mxn + + line.financial.value_temp_material_usd = line.financial.value_usd + line.financial.value_temp_material_mxn = line.financial.value_mxn # Convertir peso neto si se proporcionó invoice_weight_type = invoice.logistics.weight_type @@ -81,6 +103,8 @@ def validate_update( # Mantener peso existente line.quantity.net_weight = existing_line.quantity.net_weight + print(f"After weight conversion: net_weight={line.quantity.net_weight}, gross_weight={line.quantity.gross_weight}, weight_type={invoice_weight_type}") + # Convertir peso bruto si se proporcionó if line.quantity.gross_weight is not None: gross_weight_input = line.quantity.gross_weight @@ -141,8 +165,8 @@ def validate_update( line.customs.advalorem_american = existing_line.customs.advalorem_american # Orden de compra - if not line.reference.purchase_order: - line.reference.purchase_order = existing_line.reference.purchase_order + if not line.order: + line.order = existing_line.order # Descripciones if not line.description.description_spanish: @@ -176,8 +200,8 @@ def validate_update( # Número de parte - if not line.part_number: - line.part_number = existing_line.part_number + if not line.part_number_id: + line.part_number_id = existing_line.part_number_id # Pago de impuesto if line.tax_payment is None: diff --git a/backend/api/v1/modules/a76/items/line_customs/models.py b/backend/api/v1/modules/a76/items/line_customs/models.py index 2b400ed2..0830b768 100644 --- a/backend/api/v1/modules/a76/items/line_customs/models.py +++ b/backend/api/v1/modules/a76/items/line_customs/models.py @@ -5,7 +5,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship from core.database import Base if TYPE_CHECKING: - from ..line_items.models import LineItem + from ..models import LineItem class FractionType: """Enumeration for fraction types""" diff --git a/backend/api/v1/modules/a76/items/line_descriptions/models.py b/backend/api/v1/modules/a76/items/line_descriptions/models.py index d8c7ecbf..85eaa6b0 100644 --- a/backend/api/v1/modules/a76/items/line_descriptions/models.py +++ b/backend/api/v1/modules/a76/items/line_descriptions/models.py @@ -4,7 +4,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship from core.database import Base if TYPE_CHECKING: - from ..line_items.models import LineItem + from ..models import LineItem class LineDescription(Base): """ diff --git a/backend/api/v1/modules/a76/items/line_financials/models.py b/backend/api/v1/modules/a76/items/line_financials/models.py index eb24934f..3edaaf7d 100644 --- a/backend/api/v1/modules/a76/items/line_financials/models.py +++ b/backend/api/v1/modules/a76/items/line_financials/models.py @@ -5,7 +5,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship from core.database import Base if TYPE_CHECKING: - from ..line_items.models import LineItem + from ..models import LineItem class LineFinancial(Base): """ diff --git a/backend/api/v1/modules/a76/items/line_items/__init__.py b/backend/api/v1/modules/a76/items/line_items/__init__.py deleted file mode 100644 index 7f7ae971..00000000 --- a/backend/api/v1/modules/a76/items/line_items/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Line items module""" -from .models import LineItem -from .schemas import ( - LineItemBase, - LineItemCreate, - LineItemUpdate, - LineItemResponse, -) - -__all__ = [ - "LineItem", - "LineItemBase", - "LineItemCreate", - "LineItemUpdate", - "LineItemResponse", -] diff --git a/backend/api/v1/modules/a76/items/line_items/models.py b/backend/api/v1/modules/a76/items/line_items/models.py deleted file mode 100644 index 5192f46f..00000000 --- a/backend/api/v1/modules/a76/items/line_items/models.py +++ /dev/null @@ -1,200 +0,0 @@ -from decimal import Decimal -from typing import Optional, TYPE_CHECKING -from sqlalchemy import ( - Boolean, - String, - Integer, - Numeric, - SmallInteger, - ForeignKey, - ForeignKeyConstraint, -) -from sqlalchemy.orm import Mapped, mapped_column, relationship -from api.v1.common.base_models import TenantScopedMixin, TimestampMixin -from core.database import Base - -from api.v1.modules.a76.classes.models import Class -from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure - -if TYPE_CHECKING: - from ..models import Item - from ..line_financials.models import LineFinancial - from ..line_quantities.models import LineQuantity - from ..line_customs.models import LineCustom - from ..line_descriptions.models import LineDescription - from ..line_references.models import LineReference - from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem - - -class LineItem(Base, TenantScopedMixin, TimestampMixin): - """ - Unified line items for all items - Consolidates all line-level data from Q and S tables - """ - - __tablename__ = "item_lines" - __table_args__ = ({"schema": "a76"},) - - id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) - item_id: Mapped[int] = mapped_column(ForeignKey("a76.items.id")) - line_number: Mapped[int] = mapped_column(Integer) # LINEAIMPO/LINEAEXPO/LINEA - - # Part identification - part_number: Mapped[Optional[int]] = mapped_column( - Integer, ForeignKey("a76.parts.id") - ) # NUMPARTE - component_part_number: Mapped[Optional[int]] = mapped_column( - Integer, ForeignKey("a76.parts.id") - ) # NUMPARTECOM - class_id: Mapped[Optional[int]] = mapped_column( - ForeignKey("a76.classes.id") - ) # CLASE - - # Unit of measure - unit_of_measure: Mapped[Optional[int]] = mapped_column( - ForeignKey("a76.units_of_measure.id") - ) # UNIDADMEDIDA/UNIMED - alternate_unit: Mapped[Optional[int]] = mapped_column( - ForeignKey("a76.units_of_measure.id") - ) # UNIMEDALTERNA - uma_key: Mapped[Optional[str]] = mapped_column(String(2)) # CLAVEUMA - auxiliary_unit: Mapped[Optional[str]] = mapped_column(String(5)) # UNIMEDAUXILIAR - - # Permits and certificates - permit_number: Mapped[Optional[str]] = mapped_column(String(20)) # NUMPERMISO - page_line: Mapped[Optional[str]] = mapped_column(String(10)) # PAGRENGLON - has_certificate: Mapped[Optional[bool]] = mapped_column( - Boolean - ) # TIENECO/CERTORIGEN - certificate_number: Mapped[Optional[str]] = mapped_column( - String(10) - ) # NOCERTIFICADO - octave_permit: Mapped[Optional[str]] = mapped_column(String(20)) # PERMISOROCTAVA - permits_ped: Mapped[Optional[str]] = mapped_column(String(500)) # PERMISOSPED - - # FDA - has_fda_code: Mapped[Optional[bool]] = mapped_column(Boolean) # LLEVACODFDA - fda_key: Mapped[Optional[str]] = mapped_column(String(10)) # CLAVEFDA - - # Special flags - is_military_mcia: Mapped[Optional[bool]] = mapped_column(Boolean) # ESMCIAMILITAR - - # IV32 (Tax identification) - iv32_type_key: Mapped[Optional[str]] = mapped_column(String(5)) # CLAVETIPOIV32 - iv32_number: Mapped[Optional[str]] = mapped_column(String(35)) # NUMEROIV32 - - # IN CASE OF EXPO - scrap_invoice: Mapped[Optional[str]] = mapped_column(String(15)) # FACTURASCRAP - consecutive_destination: Mapped[Optional[int]] = mapped_column( - Integer - ) # CONSECUTIVODES - ctm_section: Mapped[Optional[str]] = mapped_column(String(3)) # APARTADOCTM - - # Tax payment - tax_payment: Mapped[Optional[bool]] = mapped_column(Boolean) # PAGOIMPUESTO - payment_method: Mapped[Optional[str]] = mapped_column( - String(9) - ) # FORMAPAGO/FORMAPAGOTIGI - igi_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # MONTOIGI - igi_payment_method: Mapped[Optional[str]] = mapped_column( - String(9) - ) # FORMAPAGOTIGI - - # FCC - fcc_key: Mapped[Optional[str]] = mapped_column(String(30)) # CLAVEFCC - - # Valuation method - valuation_method: Mapped[Optional[str]] = mapped_column(String(2)) # METVALOR - valuation_determined_value: Mapped[Optional[Decimal]] = mapped_column( - Numeric(29, 8) - ) # METVALORVALORDETERMINADO/METVALORACIONVALORDETERMINADO - valuation_reason: Mapped[Optional[str]] = mapped_column( - String(500) - ) # METVALORMOTIVODEUSO/METVALORACIONMOTIVODEUSO - - # Container rules - container_rule: Mapped[Optional[str]] = mapped_column(String(50)) # CONTENEDORREGLA - container_parts_ii: Mapped[Optional[str]] = mapped_column( - String(50) - ) # CONTENEDORPARTESII - - # APHIS - consecutive_aphis: Mapped[Optional[int]] = mapped_column( - Integer - ) # CONSECUTIVOAPHIS - - # BOM/Commercial - bom_version: Mapped[Optional[int]] = mapped_column(Integer) # VERSIONBOM - bill_version: Mapped[Optional[int]] = mapped_column(Integer) # VERSIONBILL - - # TLCAN value - tlcan_value: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORTLCAN - - # Identifier - identifier: Mapped[Optional[str]] = mapped_column(String(2)) # IDENTIFICADOR - - # Validation fields - validation_zero: Mapped[Optional[int]] = mapped_column(Integer) # VALIDACIONZERO - validation_one: Mapped[Optional[int]] = mapped_column(Integer) # VALIDACIONUNO - - # Material type - material_type: Mapped[Optional[str]] = mapped_column( - String(50) - ) # TIPOMAT/TIPODENUMPARTE - - # Order concept - order_type: Mapped[Optional[str]] = mapped_column(String(50)) # TIPODEORDEN - line_concept: Mapped[Optional[str]] = mapped_column( - String(50) - ) # CONCEPTODELAPARTIDA - - # Review dispatch - review_dispatch: Mapped[Optional[str]] = mapped_column(String(10)) # REVISARDESP - - # Take component from PT - take_component_pt: Mapped[Optional[int]] = mapped_column(Integer) # TOMARCOMOPT - - # Pallet - pallet2: Mapped[Optional[int]] = mapped_column(SmallInteger) # PALLET2 - - # Wildcard field - wildcard_field: Mapped[Optional[str]] = mapped_column(String(100)) # CAMPOCOMODIN - - # Relationships - item: Mapped["Item"] = relationship(back_populates="lines") - financial: Mapped[Optional["LineFinancial"]] = relationship( - back_populates="line", cascade="all, delete-orphan", uselist=False - ) - quantity: Mapped[Optional["LineQuantity"]] = relationship( - back_populates="line", cascade="all, delete-orphan", uselist=False - ) - customs: Mapped[Optional["LineCustom"]] = relationship( - back_populates="line", cascade="all, delete-orphan", uselist=False - ) - description: Mapped[Optional["LineDescription"]] = relationship( - back_populates="line", cascade="all, delete-orphan", uselist=False - ) - reference: Mapped[Optional["LineReference"]] = relationship( - back_populates="line", cascade="all, delete-orphan", uselist=False - ) - class_info: Mapped[Optional["Class"]] = relationship( - "api.v1.modules.a76.classes.models.Class", - foreign_keys=[class_id], - viewonly=True, - ) - unit_of_measure_info: Mapped[Optional["UnitOfMeasure"]] = relationship( - "api.v1.modules.a76.general_catalogs.units_of_measure.models.UnitOfMeasure", - foreign_keys=[unit_of_measure], - viewonly=True, - ) - fa_data: Mapped[Optional["FaLineItem"]] = relationship( - "FaLineItem", - back_populates="master_info", - cascade="all, delete-orphan", - uselist=False, - ) - part_info: Mapped[Optional["api.v1.modules.a76.parts.models.Part"]] = relationship( - "api.v1.modules.a76.parts.models.Part", - foreign_keys=[part_number], - viewonly=True, - ) diff --git a/backend/api/v1/modules/a76/items/line_items/schemas.py b/backend/api/v1/modules/a76/items/line_items/schemas.py deleted file mode 100644 index 86e0b168..00000000 --- a/backend/api/v1/modules/a76/items/line_items/schemas.py +++ /dev/null @@ -1,293 +0,0 @@ -from decimal import Decimal -from typing import Optional, Any -from pydantic import BaseModel, Field, ConfigDict, field_validator, model_validator - -# Import nested schemas -from ..line_customs.schemas import ( - LineCustomCreate, - LineCustomUpdate, - LineCustomResponse, -) -from ..line_descriptions.schemas import ( - LineDescriptionCreate, - LineDescriptionUpdate, - LineDescriptionResponse, -) -from ..line_quantities.schemas import ( - LineQuantityCreate, - LineQuantityUpdate, - LineQuantityResponse, -) -from ..line_financials.schemas import ( - LineFinancialCreate, - LineFinancialUpdate, - LineFinancialResponse, -) -from ..line_references.schemas import ( - LineReferenceCreate, - LineReferenceUpdate, - LineReferenceResponse, -) - -from api.v1.modules.a24.fa.fa_item_lines.dto import ( - FaLineItemCreateDTO, - FaLineItemUpdateDTO, - FaLineItemResponseDTO, -) - - -# ============================================================================ -# LINE ITEM SCHEMAS -# ============================================================================ - - -class LineItemBase(BaseModel): - """Base schema for line items""" - - model_config = ConfigDict(populate_by_name=True) - - item_id: int = Field(..., description="ID of the parent item") - line_number: int = Field(..., description="Line number") - - # Part identification - part_number_id: Optional[int] = Field( - None, - description="Part number", - alias="part_number", - serialization_alias="part_number_id", - ) - component_part_number_id: Optional[int] = Field( - None, - description="Component part number", - alias="component_part_number", - serialization_alias="component_part_number_id", - ) - class_id: Optional[int] = Field(None, description="Class code") - - # Unit of measure - unit_of_measure: Optional[int] = Field(None, description="Unit of measure") - alternate_unit: Optional[int] = Field(None, description="Alternate unit") - uma_key: Optional[str] = Field(None, max_length=2, description="UMA key") - auxiliary_unit: Optional[str] = Field( - None, max_length=5, description="Auxiliary unit" - ) - - # Permits and certificates - permit_number: Optional[str] = Field( - None, max_length=20, description="Permit number" - ) - page_line: Optional[str] = Field(None, max_length=10, description="Page line") - has_certificate: Optional[bool] = Field(None, description="Has certificate") - certificate_number: Optional[str] = Field( - None, max_length=10, description="Certificate number" - ) - octave_permit: Optional[str] = Field( - None, max_length=20, description="Octave permit" - ) - permits_ped: Optional[str] = Field(None, max_length=500, description="PED permits") - - # FDA - has_fda_code: Optional[bool] = Field(None, description="Has FDA code") - fda_key: Optional[str] = Field(None, max_length=10, description="FDA key") - - # Special flags - is_military_mcia: Optional[bool] = Field( - None, description="Is military merchandise" - ) - - # IV32 - iv32_type_key: Optional[str] = Field( - None, max_length=5, description="IV32 type key" - ) - iv32_number: Optional[str] = Field(None, max_length=35, description="IV32 number") - - # Export specific - scrap_invoice: Optional[str] = Field( - None, max_length=15, description="Scrap invoice" - ) - consecutive_destination: Optional[int] = Field( - None, description="Consecutive destination" - ) - ctm_section: Optional[str] = Field(None, max_length=3, description="CTM section") - - # Tax payment - tax_payment: Optional[bool] = Field(None, description="Tax payment") - payment_method: Optional[str] = Field( - None, max_length=9, description="Payment method" - ) - igi_amount: Optional[Decimal] = Field(None, description="IGI amount") - igi_payment_method: Optional[str] = Field( - None, max_length=9, description="IGI payment method" - ) - - # FCC - fcc_key: Optional[str] = Field(None, max_length=30, description="FCC key") - - # Valuation method - valuation_method: Optional[str] = Field( - None, max_length=2, description="Valuation method" - ) - valuation_determined_value: Optional[Decimal] = Field( - None, description="Valuation determined value" - ) - valuation_reason: Optional[str] = Field( - None, max_length=500, description="Valuation reason" - ) - - # Container rules - container_rule: Optional[str] = Field( - None, max_length=50, description="Container rule" - ) - container_parts_ii: Optional[str] = Field( - None, max_length=50, description="Container parts II" - ) - - # APHIS - consecutive_aphis: Optional[int] = Field(None, description="Consecutive APHIS") - - # BOM/Commercial - bom_version: Optional[int] = Field(None, description="BOM version") - bill_version: Optional[int] = Field(None, description="Bill version") - - # TLCAN value - tlcan_value: Optional[Decimal] = Field(None, description="TLCAN value") - - # Identifier - identifier: Optional[str] = Field(None, max_length=2, description="Identifier") - - # Validation fields - validation_zero: Optional[int] = Field(None, description="Validation zero") - validation_one: Optional[int] = Field(None, description="Validation one") - - # Material type - material_type: Optional[str] = Field( - None, max_length=50, description="Material type" - ) - - # Order concept - order_type: Optional[str] = Field(None, max_length=50, description="Order type") - line_concept: Optional[str] = Field(None, max_length=50, description="Line concept") - - # Review dispatch - review_dispatch: Optional[str] = Field( - None, max_length=10, description="Review dispatch" - ) - - # Take component from PT - take_component_pt: Optional[int] = Field(None, description="Take component from PT") - - # Pallet - pallet2: Optional[int] = Field(None, description="Pallet 2") - - # Wildcard field - wildcard_field: Optional[str] = Field( - None, max_length=100, description="Wildcard field" - ) - - -class LineItemCreate(LineItemBase): - """Schema for creating line item with all nested data""" - - # Override base fields - estos se asignan automáticamente en el service - item_id: Optional[int] = Field( - None, description="ID of the parent item (auto-assigned)" - ) - line_number: Optional[int] = Field(None, description="Line number (auto-assigned)") - - financial: Optional[LineFinancialCreate] = Field( - None, description="Financial data for this line" - ) - quantity: Optional[LineQuantityCreate] = Field( - None, description="Quantity data for this line" - ) - customs: Optional[LineCustomCreate] = Field( - None, description="Customs data for this line" - ) - description: Optional[LineDescriptionCreate] = Field( - None, description="Description data for this line" - ) - reference: Optional[LineReferenceCreate] = Field( - None, description="Reference data for this line" - ) - fa_data: Optional[FaLineItemCreateDTO] = Field( - None, description="Fixed Asset data for this line" - ) - - -class LineItemUpdate(LineItemBase): - """Schema for updating line item with all nested data""" - - # Override base fields - todos opcionales en updates - item_id: Optional[int] = Field(None, description="ID of the parent item") - line_number: Optional[int] = Field(None, description="Line number") - financial: Optional[LineFinancialUpdate] = Field( - None, description="Financial data for this line" - ) - quantity: Optional[LineQuantityUpdate] = Field( - None, description="Quantity data for this line" - ) - customs: Optional[LineCustomUpdate] = Field( - None, description="Customs data for this line" - ) - description: Optional[LineDescriptionUpdate] = Field( - None, description="Description data for this line" - ) - reference: Optional[LineReferenceUpdate] = Field( - None, description="Reference data for this line" - ) - fa_data: Optional[FaLineItemUpdateDTO] = Field( - None, description="Fixed Asset data for this line" - ) - - -class LineItemResponse(LineItemBase): - """Schema for line item response with all nested data""" - - id: int - item_id: int - financial: Optional[LineFinancialResponse] = None - quantity: Optional[LineQuantityResponse] = None - customs: Optional[LineCustomResponse] = None - description: Optional[LineDescriptionResponse] = None - reference: Optional[LineReferenceResponse] = None - fa_data: Optional[FaLineItemResponseDTO] = None - - # Fields populated from relationships - class_code: Optional[str] = None - class_description: Optional[str] = None - unit_of_measure_code: Optional[str] = None - - model_config = ConfigDict(from_attributes=True) - - @model_validator(mode="before") - @classmethod - def extract_relationship_info(cls, data: Any) -> Any: - """Extract class_code, class_description and unit_of_measure_code from relationships""" - if isinstance(data, dict): - return data - - # It's an ORM object - result = {} - for key in cls.model_fields.keys(): - if hasattr(data, key): - result[key] = getattr(data, key) - - # Map model field names to schema field names for aliased fields - if hasattr(data, "part_number"): - result["part_number_id"] = data.part_number - if hasattr(data, "component_part_number"): - result["component_part_number_id"] = data.component_part_number - - # Extract class info - if hasattr(data, "class_info") and data.class_info is not None: - result["class_code"] = data.class_info.class_code - result["class_description"] = data.class_info.description_es - - # Extract unit of measure code - if ( - hasattr(data, "unit_of_measure_info") - and data.unit_of_measure_info is not None - ): - result["unit_of_measure_code"] = data.unit_of_measure_info.code - - return result diff --git a/backend/api/v1/modules/a76/items/line_quantities/models.py b/backend/api/v1/modules/a76/items/line_quantities/models.py index 24831f9d..d21e8835 100644 --- a/backend/api/v1/modules/a76/items/line_quantities/models.py +++ b/backend/api/v1/modules/a76/items/line_quantities/models.py @@ -7,7 +7,7 @@ from core.database import Base from api.v1.modules.a76.general_catalogs.packages.models import Package if TYPE_CHECKING: - from ..line_items.models import LineItem + from ..models import LineItem class LineQuantity(Base): """ diff --git a/backend/api/v1/modules/a76/items/line_references/models.py b/backend/api/v1/modules/a76/items/line_references/models.py index 1402795c..608d0c83 100644 --- a/backend/api/v1/modules/a76/items/line_references/models.py +++ b/backend/api/v1/modules/a76/items/line_references/models.py @@ -4,7 +4,7 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship from core.database import Base if TYPE_CHECKING: - from ..line_items.models import LineItem + from ..models import LineItem class LineReference(Base): """ diff --git a/backend/api/v1/modules/a76/items/models.py b/backend/api/v1/modules/a76/items/models.py index 53e75cfd..7da837c3 100644 --- a/backend/api/v1/modules/a76/items/models.py +++ b/backend/api/v1/modules/a76/items/models.py @@ -3,58 +3,229 @@ Normalized Database Schema for SCAF (Fixed Assets) and SCAII (Parts Inventory) SQLAlchemy v2 - Annex 24 Compliance """ -from typing import Optional, TYPE_CHECKING, List -from sqlalchemy import Boolean, String, Integer, ForeignKey +from typing import Optional, TYPE_CHECKING +from core.database import Base +from decimal import Decimal +from sqlalchemy import Boolean, String, Integer, Numeric, SmallInteger, ForeignKey from sqlalchemy.orm import Mapped, mapped_column, relationship from api.v1.common.base_models import TenantScopedMixin, TimestampMixin from core.database import Base +from api.v1.modules.a76.classes.models import Class +from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure + if TYPE_CHECKING: - from .line_items.models import LineItem + from .line_financials.models import LineFinancial + from .line_quantities.models import LineQuantity + from .line_customs.models import LineCustom + from .line_descriptions.models import LineDescription + from .line_references.models import LineReference + from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem + from api.v1.modules.a76.parts.models import Part + from api.v1.modules.a76.invoices.models import InvoiceHeader # ============================================================================ # CORE ENTITIES # ============================================================================ -class Item(Base, TenantScopedMixin, TimestampMixin): +class LineItem(Base, TenantScopedMixin, TimestampMixin): """ Unified item header table for all import/export operations Consolidates headers from both SCAF and SCAII systems """ - __tablename__ = "items" + + __tablename__ = "item_lines" __table_args__ = { "schema": "a76", } id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) - invoice_id: Mapped[int] = mapped_column(ForeignKey("a76.invoice_header.id")) # CONSECUTIVO + invoice_id: Mapped[int] = mapped_column( + ForeignKey("a76.invoice_header.id") + ) # CONSECUTIVO + + line_number: Mapped[int] = mapped_column(Integer) # LINEAIMPO/LINEAEXPO/LINEA + + # Part identification + part_number_id: Mapped[Optional[int]] = mapped_column( + Integer, ForeignKey("a76.parts.id") + ) # NUMPARTE + component_part_number_id: Mapped[Optional[int]] = mapped_column( + Integer, ForeignKey("a76.parts.id") + ) # NUMPARTECOM + class_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.classes.id") + ) # CLASE + + # Unit of measure + unit_of_measure: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.units_of_measure.id") + ) # UNIDADMEDIDA/UNIMED + alternate_unit: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.units_of_measure.id") + ) # UNIMEDALTERNA + uma_key: Mapped[Optional[str]] = mapped_column(String(2)) # CLAVEUMA + auxiliary_unit: Mapped[Optional[str]] = mapped_column(String(5)) # UNIMEDAUXILIAR + + # Permits and certificates + permit_number: Mapped[Optional[str]] = mapped_column(String(20)) # NUMPERMISO + page_line: Mapped[Optional[str]] = mapped_column(String(10)) # PAGRENGLON + has_certificate: Mapped[Optional[bool]] = mapped_column( + Boolean + ) # TIENECO/CERTORIGEN + certificate_number: Mapped[Optional[str]] = mapped_column( + String(10) + ) # NOCERTIFICADO + octave_permit: Mapped[Optional[str]] = mapped_column(String(20)) # PERMISOROCTAVA + permits_ped: Mapped[Optional[str]] = mapped_column(String(500)) # PERMISOSPED + + # FDA + has_fda_code: Mapped[Optional[bool]] = mapped_column(Boolean) # LLEVACODFDA + fda_key: Mapped[Optional[str]] = mapped_column(String(10)) # CLAVEFDA + + # Special flags + is_military_mcia: Mapped[Optional[bool]] = mapped_column(Boolean) # ESMCIAMILITAR + + # IV32 (Tax identification) + iv32_type_key: Mapped[Optional[str]] = mapped_column(String(5)) # CLAVETIPOIV32 + iv32_number: Mapped[Optional[str]] = mapped_column(String(35)) # NUMEROIV32 + + # IN CASE OF EXPO + scrap_invoice: Mapped[Optional[str]] = mapped_column(String(15)) # FACTURASCRAP + consecutive_destination: Mapped[Optional[int]] = mapped_column( + Integer + ) # CONSECUTIVODES + ctm_section: Mapped[Optional[str]] = mapped_column(String(3)) # APARTADOCTM + + # Tax payment + tax_payment: Mapped[Optional[bool]] = mapped_column(Boolean) # PAGOIMPUESTO + payment_method: Mapped[Optional[str]] = mapped_column( + String(9) + ) # FORMAPAGO/FORMAPAGOTIGI + igi_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # MONTOIGI + igi_payment_method: Mapped[Optional[str]] = mapped_column( + String(9) + ) # FORMAPAGOTIGI + + # FCC + fcc_key: Mapped[Optional[str]] = mapped_column(String(30)) # CLAVEFCC + + # Valuation method + valuation_method: Mapped[Optional[str]] = mapped_column(String(2)) # METVALOR + valuation_determined_value: Mapped[Optional[Decimal]] = mapped_column( + Numeric(29, 8) + ) # METVALORVALORDETERMINADO/METVALORACIONVALORDETERMINADO + valuation_reason: Mapped[Optional[str]] = mapped_column( + String(500) + ) # METVALORMOTIVODEUSO/METVALORACIONMOTIVODEUSO + + # Container rules + container_rule: Mapped[Optional[str]] = mapped_column(String(50)) # CONTENEDORREGLA + container_parts_ii: Mapped[Optional[str]] = mapped_column( + String(50) + ) # CONTENEDORPARTESII + + # APHIS + consecutive_aphis: Mapped[Optional[int]] = mapped_column( + Integer + ) # CONSECUTIVOAPHIS + + # BOM/Commercial + bom_version: Mapped[Optional[int]] = mapped_column(Integer) # VERSIONBOM + bill_version: Mapped[Optional[int]] = mapped_column(Integer) # VERSIONBILL + + # TLCAN value + tlcan_value: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORTLCAN + + # Identifier + identifier: Mapped[Optional[str]] = mapped_column(String(2)) # IDENTIFICADOR + + # Validation fields + validation_zero: Mapped[Optional[int]] = mapped_column(Integer) # VALIDACIONZERO + validation_one: Mapped[Optional[int]] = mapped_column(Integer) # VALIDACIONUNO + + # Material type + material_type: Mapped[Optional[str]] = mapped_column( + String(50) + ) # TIPOMAT/TIPODENUMPARTE + + # Order concept + order_type: Mapped[Optional[str]] = mapped_column(String(50)) # TIPODEORDEN + line_concept: Mapped[Optional[str]] = mapped_column( + String(50) + ) # CONCEPTODELAPARTIDA + + # Review dispatch + review_dispatch: Mapped[Optional[str]] = mapped_column(String(10)) # REVISARDESP + + # Take component from PT + take_component_pt: Mapped[Optional[int]] = mapped_column(Integer) # TOMARCOMOPT + + # Pallet + pallet2: Mapped[Optional[int]] = mapped_column(SmallInteger) # PALLET2 + + # Wildcard field + wildcard_field: Mapped[Optional[str]] = mapped_column(String(100)) # CAMPOCOMODIN # Item references - reference_number: Mapped[Optional[str]] = mapped_column( - String(20)) # NUMREFERENCIA - order: Mapped[Optional[str]] = mapped_column( - String(50)) # ORDENCOMPRA / ORDENVENTA + reference_number: Mapped[Optional[str]] = mapped_column(String(20)) # NUMREFERENCIA + order: Mapped[Optional[str]] = mapped_column(String(50)) # ORDENCOMPRA / ORDENVENTA guide_number: Mapped[Optional[str]] = mapped_column( - String(50)) # NUMEROGUIA/NUMERODEGUIA + String(50) + ) # NUMEROGUIA/NUMERODEGUIA # Dates depreciation_date: Mapped[Optional[int]] = mapped_column( - Integer) # FECHADEPRECIACION + Integer + ) # FECHADEPRECIACION # Administrative fields - rectification: Mapped[Optional[bool]] = mapped_column( - Boolean) # RECTIFICACION + rectification: Mapped[Optional[bool]] = mapped_column(Boolean) # RECTIFICACION warehouse: Mapped[Optional[str]] = mapped_column(String(30)) # BODEGA - location: Mapped[Optional[str]] = mapped_column( - String(200)) # LOCALIZACION + location: Mapped[Optional[str]] = mapped_column(String(200)) # LOCALIZACION - # Relationships (one-to-many) - lines: Mapped[List["LineItem"]] = relationship( - "LineItem", back_populates="item", cascade="all, delete-orphan") - invoice: Mapped["InvoiceHeader"] = relationship("InvoiceHeader") + # Relationships + financial: Mapped[Optional["LineFinancial"]] = relationship( + back_populates="line", cascade="all, delete-orphan", uselist=False + ) + quantity: Mapped[Optional["LineQuantity"]] = relationship( + back_populates="line", cascade="all, delete-orphan", uselist=False + ) + customs: Mapped[Optional["LineCustom"]] = relationship( + back_populates="line", cascade="all, delete-orphan", uselist=False + ) + description: Mapped[Optional["LineDescription"]] = relationship( + back_populates="line", cascade="all, delete-orphan", uselist=False + ) + reference: Mapped[Optional["LineReference"]] = relationship( + back_populates="line", cascade="all, delete-orphan", uselist=False + ) + class_info: Mapped[Optional["Class"]] = relationship( + "api.v1.modules.a76.classes.models.Class", + foreign_keys=[class_id], + viewonly=True, + ) + unit_of_measure_info: Mapped[Optional["UnitOfMeasure"]] = relationship( + "api.v1.modules.a76.general_catalogs.units_of_measure.models.UnitOfMeasure", + foreign_keys=[unit_of_measure], + viewonly=True, + ) + fa_data: Mapped[Optional["FaLineItem"]] = relationship( + "FaLineItem", + back_populates="master_info", + cascade="all, delete-orphan", + uselist=False, + ) + part_info: Mapped[Optional["Part"]] = relationship( + "Part", + foreign_keys=[part_number_id], + viewonly=True, + ) + + # ============================================================================ # SUPPORTING TABLES # ============================================================================ @@ -65,6 +236,7 @@ class PackingList(Base, TenantScopedMixin, TimestampMixin): Packing list items From: SPartidasPackingList """ + __tablename__ = "packing_lists" __table_args__ = { "schema": "a76", @@ -73,7 +245,8 @@ class PackingList(Base, TenantScopedMixin, TimestampMixin): id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) item_line_id: Mapped[int] = mapped_column(Integer) # LINEA packing_list_number: Mapped[Optional[str]] = mapped_column( - String(100)) # NUMPACKINGLIST + String(100) + ) # NUMPACKINGLIST class CTMReceipt(Base, TenantScopedMixin, TimestampMixin): @@ -81,6 +254,7 @@ class CTMReceipt(Base, TenantScopedMixin, TimestampMixin): CTM Receipt lines (temporary manufacturing) From: SPartidasReciboCTM """ + __tablename__ = "ctm_receipts" __table_args__ = { "schema": "a76", @@ -88,11 +262,11 @@ class CTMReceipt(Base, TenantScopedMixin, TimestampMixin): id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) receipt_line: Mapped[int] = mapped_column( - ForeignKey("a76.item_lines.id")) # LINEARECIBO + ForeignKey("a76.item_lines.id") + ) # LINEARECIBO option: Mapped[Optional[str]] = mapped_column(String(3)) # OPCION - exit_invoice: Mapped[Optional[str]] = mapped_column( - String(19)) # FACTURASALIDA + exit_invoice: Mapped[Optional[str]] = mapped_column(String(19)) # FACTURASALIDA class SubassemblyEntry(Base, TenantScopedMixin, TimestampMixin): @@ -100,6 +274,7 @@ class SubassemblyEntry(Base, TenantScopedMixin, TimestampMixin): Subassembly/Submanufacturing Entry lines From: SPartidasEntradaSM """ + __tablename__ = "subassembly_entries" __table_args__ = { "schema": "a76", @@ -107,10 +282,10 @@ class SubassemblyEntry(Base, TenantScopedMixin, TimestampMixin): id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) remission_line: Mapped[int] = mapped_column(Integer) # LINEAREMISION - exit_invoice: Mapped[Optional[str]] = mapped_column( -String(15)) # FACTURASALIDA + exit_invoice: Mapped[Optional[str]] = mapped_column(String(15)) # FACTURASALIDA exit_line: Mapped[Optional[int]] = mapped_column(Integer) # LINEASALIDA + # ============================================================================ # INDEXES AND CONSTRAINTS # ============================================================================ @@ -189,8 +364,8 @@ MIGRATION STRATEGY FROM ORIGINAL TABLES TO NORMALIZED SCHEMA: 7. QUERYING EXAMPLES: ```python # Get all imports (both systems) - session.query(Item).filter( - Item.item_type.in_(['IMPORT', 'EQUIPMENT_IMPORT_TEMP', 'EQUIPMENT_IMPORT_DEF']) + session.query(LineItem).filter( + LineItem.item_type.in_(['IMPORT', 'EQUIPMENT_IMPORT_TEMP', 'EQUIPMENT_IMPORT_DEF']) ) # Get all lines for a specific part across all items @@ -199,8 +374,8 @@ MIGRATION STRATEGY FROM ORIGINAL TABLES TO NORMALIZED SCHEMA: ) # Get SCAF equipment with depreciation - session.query(Item).join(LineItem).filter( - Item.system_origin == 'SCAF', + session.query(LineItem).join(LineItem).filter( + LineItem.system_origin == 'SCAF', LineItem.value_depreciated_usd.isnot(None) ) ``` diff --git a/backend/api/v1/modules/a76/items/routes.py b/backend/api/v1/modules/a76/items/routes.py index 4bf677e3..ee1c9e14 100644 --- a/backend/api/v1/modules/a76/items/routes.py +++ b/backend/api/v1/modules/a76/items/routes.py @@ -11,10 +11,10 @@ from core.database import get_core_db from core.security import get_current_user, validate_access_to_resource from .schemas import ( - ItemCreate, - ItemUpdate, - ItemResponse, - ItemListResponse, + LineItemCreate, + LineItemUpdate, + LineItemResponse, + LineItemListResponse, ) from .service import ItemService @@ -25,9 +25,9 @@ router = APIRouter(prefix="/items", tags=["Items"]) # ITEM CRUD ENDPOINTS # ============================================================================ -@router.post("/", response_model=ItemResponse, status_code=status.HTTP_201_CREATED) +@router.post("/", response_model=LineItemResponse, status_code=status.HTTP_201_CREATED) async def create_item( - item_data: ItemCreate, + item_data: LineItemCreate, company_id: int = Query(..., description="Company ID"), db: Session = Depends(get_core_db), current_user: Dict[str, Any] = Depends(get_current_user), @@ -36,7 +36,6 @@ async def create_item( Create a new item with multiple line items and their nested data The item follows a one-to-many relationship structure: - - Item has many LineItems - Each LineItem has one LineFinancial - Each LineItem has one LineQuantity - Each LineItem has one LineCustoms @@ -49,7 +48,7 @@ async def create_item( return service.create(db, item_data, tenant_id, company_id) -@router.get("/{item_id}", response_model=ItemResponse) +@router.get("/{item_id}", response_model=LineItemResponse) async def get_item( item_id: int = Path(..., description="Item ID"), company_id: int = Query(..., description="Company ID"), @@ -70,7 +69,7 @@ async def get_item( return item -@router.get("/", response_model=ItemListResponse) +@router.get("/", response_model=LineItemListResponse) async def list_items( company_id: int = Query(..., description="Company ID"), skip: int = Query(0, ge=0, description="Number of records to skip"), @@ -109,7 +108,7 @@ async def list_items( items, total = service.get_all( db, tenant_id, company_id, skip, limit, filters) - return ItemListResponse( + return LineItemListResponse( total=total, items=items, skip=skip, @@ -117,10 +116,10 @@ async def list_items( ) -@router.put("/{item_id}", response_model=ItemResponse) +@router.put("/{item_id}", response_model=LineItemResponse) async def update_item( item_id: int = Path(..., description="Item ID"), - item_data: ItemUpdate = ..., + item_data: LineItemUpdate = ..., company_id: int = Query(..., description="Company ID"), db: Session = Depends(get_core_db), current_user: Dict[str, Any] = Depends(get_current_user), @@ -168,7 +167,7 @@ async def delete_item( # ADDITIONAL ENDPOINTS FOR INVOICE # ============================================================================ -@router.get("/invoice/{invoice_id}/items", response_model=ItemListResponse) +@router.get("/invoice/{invoice_id}/items", response_model=LineItemListResponse) async def get_items_by_invoice( invoice_id: int = Path(..., description="Invoice ID"), company_id: int = Query(..., description="Company ID"), @@ -186,7 +185,7 @@ async def get_items_by_invoice( items, total = service.get_by_invoice( db, invoice_id, tenant_id, company_id, skip, limit) - return ItemListResponse( + return LineItemListResponse( total=total, items=items, skip=skip, diff --git a/backend/api/v1/modules/a76/items/schemas.py b/backend/api/v1/modules/a76/items/schemas.py index 3503bab1..b54c914b 100644 --- a/backend/api/v1/modules/a76/items/schemas.py +++ b/backend/api/v1/modules/a76/items/schemas.py @@ -1,19 +1,46 @@ """ Schemas for Items and related entities Complete nested one-to-one structure: -Item -> LineItem -> LineFinancial -> LineQuantity -> LineCustoms -> LineDescription -> LineReference +LineItem -> LineFinancial -> LineQuantity -> LineCustoms -> LineDescription -> LineReference """ -from typing import Optional +from typing import Any, Optional, Union from datetime import datetime from decimal import Decimal -from pydantic import BaseModel, Field, ConfigDict +from pydantic import BaseModel, Field, ConfigDict, model_validator # Import schemas from individual modules -from .line_items.schemas import ( - LineItemCreate, - LineItemUpdate, - LineItemResponse +# Import nested schemas +from .line_customs.schemas import ( + LineCustomCreate, + LineCustomUpdate, + LineCustomResponse, +) +from .line_descriptions.schemas import ( + LineDescriptionCreate, + LineDescriptionUpdate, + LineDescriptionResponse, +) +from .line_quantities.schemas import ( + LineQuantityCreate, + LineQuantityUpdate, + LineQuantityResponse, +) +from .line_financials.schemas import ( + LineFinancialCreate, + LineFinancialUpdate, + LineFinancialResponse, +) +from .line_references.schemas import ( + LineReferenceCreate, + LineReferenceUpdate, + LineReferenceResponse, +) + +from api.v1.modules.a24.fa.fa_item_lines.dto import ( + FaLineItemCreateDTO, + FaLineItemUpdateDTO, + FaLineItemResponseDTO, ) @@ -21,53 +48,294 @@ from .line_items.schemas import ( # ITEM SCHEMAS # ============================================================================ -class ItemBase(BaseModel): + +class LineItemBase(BaseModel): """Base schema for items""" + + model_config = ConfigDict(populate_by_name=True) + invoice_id: int = Field(..., description="Invoice ID") + line_number: int = Field(..., description="Line number") + + # Part identification + part_number_id: Union[int, str, None] = Field( + None, + description="Part number", + alias="part_number", + serialization_alias="part_number_id", + ) + component_part_number_id: Union[int, str, None] = Field( + None, + description="Component part number", + alias="component_part_number", + serialization_alias="component_part_number_id", + ) + class_id: Optional[int] = Field(None, description="Class code") + + # Unit of measure + unit_of_measure: Optional[int] = Field(None, description="Unit of measure") + alternate_unit: Optional[int] = Field(None, description="Alternate unit") + uma_key: Optional[str] = Field(None, max_length=2, description="UMA key") + auxiliary_unit: Optional[str] = Field( + None, max_length=5, description="Auxiliary unit" + ) + + # Permits and certificates + permit_number: Optional[str] = Field( + None, max_length=20, description="Permit number" + ) + page_line: Optional[str] = Field(None, max_length=10, description="Page line") + has_certificate: Optional[bool] = Field(None, description="Has certificate") + certificate_number: Optional[str] = Field( + None, max_length=10, description="Certificate number" + ) + octave_permit: Optional[str] = Field( + None, max_length=20, description="Octave permit" + ) + permits_ped: Optional[str] = Field(None, max_length=500, description="PED permits") + + # FDA + has_fda_code: Optional[bool] = Field(None, description="Has FDA code") + fda_key: Optional[str] = Field(None, max_length=10, description="FDA key") + + # Special flags + is_military_mcia: Optional[bool] = Field( + None, description="Is military merchandise" + ) + + # IV32 + iv32_type_key: Optional[str] = Field( + None, max_length=5, description="IV32 type key" + ) + iv32_number: Optional[str] = Field(None, max_length=35, description="IV32 number") + + # Export specific + scrap_invoice: Optional[str] = Field( + None, max_length=15, description="Scrap invoice" + ) + consecutive_destination: Optional[int] = Field( + None, description="Consecutive destination" + ) + ctm_section: Optional[str] = Field(None, max_length=3, description="CTM section") + + # Tax payment + tax_payment: Optional[bool] = Field(None, description="Tax payment") + payment_method: Optional[str] = Field( + None, max_length=9, description="Payment method" + ) + igi_amount: Optional[Decimal] = Field(None, description="IGI amount") + igi_payment_method: Optional[str] = Field( + None, max_length=9, description="IGI payment method" + ) + + # FCC + fcc_key: Optional[str] = Field(None, max_length=30, description="FCC key") + + # Valuation method + valuation_method: Optional[str] = Field( + None, max_length=2, description="Valuation method" + ) + valuation_determined_value: Optional[Decimal] = Field( + None, description="Valuation determined value" + ) + valuation_reason: Optional[str] = Field( + None, max_length=500, description="Valuation reason" + ) + + # Container rules + container_rule: Optional[str] = Field( + None, max_length=50, description="Container rule" + ) + container_parts_ii: Optional[str] = Field( + None, max_length=50, description="Container parts II" + ) + + # APHIS + consecutive_aphis: Optional[int] = Field(None, description="Consecutive APHIS") + + # BOM/Commercial + bom_version: Optional[int] = Field(None, description="BOM version") + bill_version: Optional[int] = Field(None, description="Bill version") + + # TLCAN value + tlcan_value: Optional[Decimal] = Field(None, description="TLCAN value") + + # Identifier + identifier: Optional[str] = Field(None, max_length=2, description="Identifier") + + # Validation fields + validation_zero: Optional[int] = Field(None, description="Validation zero") + validation_one: Optional[int] = Field(None, description="Validation one") + + # Material type + material_type: Optional[str] = Field( + None, max_length=50, description="Material type" + ) + + # Order concept + order_type: Optional[str] = Field(None, max_length=50, description="Order type") + line_concept: Optional[str] = Field(None, max_length=50, description="Line concept") + + # Review dispatch + review_dispatch: Optional[str] = Field( + None, max_length=10, description="Review dispatch" + ) + + # Take component from PT + take_component_pt: Optional[int] = Field(None, description="Take component from PT") + + # Pallet + pallet2: Optional[int] = Field(None, description="Pallet 2") + + # Wildcard field + wildcard_field: Optional[str] = Field( + None, max_length=100, description="Wildcard field" + ) reference_number: Optional[str] = Field( - None, max_length=20, description="Reference number") + None, max_length=20, description="Reference number" + ) order: Optional[str] = Field(None, max_length=50, description="Order") - guide_number: Optional[str] = Field( - None, max_length=50, description="Guide number") + guide_number: Optional[str] = Field(None, max_length=50, description="Guide number") # Dates - depreciation_date: Optional[int] = Field( - None, description="Depreciation date") + depreciation_date: Optional[int] = Field(None, description="Depreciation date") # Administrative fields rectification: Optional[int] = Field(None, description="Rectification") - warehouse: Optional[str] = Field( - None, max_length=30, description="Warehouse") - location: Optional[str] = Field( - None, max_length=200, description="Location") + warehouse: Optional[str] = Field(None, max_length=30, description="Warehouse") + location: Optional[str] = Field(None, max_length=200, description="Location") -class ItemCreate(ItemBase): +class LineItemCreate(LineItemBase): """Schema for creating item with nested lines (one-to-many)""" - lines: Optional[list[LineItemCreate]] = Field( - default=[], description="List of line items") + + # Override base fields - estos se asignan automáticamente en el service + line_number: Optional[int] = Field(None, description="Line number (auto-assigned)") + + financial: Optional[LineFinancialCreate] = Field( + None, description="Financial data for this line" + ) + quantity: Optional[LineQuantityCreate] = Field( + None, description="Quantity data for this line" + ) + customs: Optional[LineCustomCreate] = Field( + None, description="Customs data for this line" + ) + description: Optional[LineDescriptionCreate] = Field( + None, description="Description data for this line" + ) + reference: Optional[LineReferenceCreate] = Field( + None, description="Reference data for this line" + ) + fa_data: Optional[FaLineItemCreateDTO] = Field( + None, description="Fixed Asset data for this line" + ) -class ItemUpdate(ItemBase): +class LineItemUpdate(LineItemBase): """Schema for updating item""" + invoice_id: Optional[int] = Field(None, description="Invoice ID") - lines: Optional[list[LineItemUpdate]] = Field( - None, description="List of line items to update") + # Override base fields - todos opcionales en updates + line_number: Optional[int] = Field(None, description="Line number") + financial: Optional[LineFinancialUpdate] = Field( + None, description="Financial data for this line" + ) + quantity: Optional[LineQuantityUpdate] = Field( + None, description="Quantity data for this line" + ) + customs: Optional[LineCustomUpdate] = Field( + None, description="Customs data for this line" + ) + description: Optional[LineDescriptionUpdate] = Field( + None, description="Description data for this line" + ) + reference: Optional[LineReferenceUpdate] = Field( + None, description="Reference data for this line" + ) + fa_data: Optional[FaLineItemUpdateDTO] = Field( + None, description="Fixed Asset data for this line" + ) -class ItemResponse(ItemBase): - """Schema for item response with nested data (one-to-many)""" +class LineItemResponse(LineItemBase): + """Schema for single item response""" + id: int - lines: list[LineItemResponse] = Field( - default=[], description="List of line items") + invoice_id: int + line_number: int - model_config = ConfigDict(from_attributes=True) + # Part identification + part_number_id: Optional[int] = Field( + None, alias="part_number", serialization_alias="part_number_id" + ) + component_part_number_id: Optional[int] = Field( + None, + alias="component_part_number", + serialization_alias="component_part_number_id", + ) + class_id: Optional[int] = None + + # Nested data + financial: Optional[LineFinancialResponse] = None + quantity: Optional[LineQuantityResponse] = None + customs: Optional[LineCustomResponse] = None + description: Optional[LineDescriptionResponse] = None + reference: Optional[LineReferenceResponse] = None + fa_data: Optional[FaLineItemResponseDTO] = None + + # Fields populated from relationships + class_code: Optional[str] = None + class_description: Optional[str] = None + unit_of_measure_code: Optional[str] = None + + # Additional fields that might be present + reference_number: Optional[str] = None + order: Optional[str] = None + warehouse: Optional[str] = None + location: Optional[str] = None + + model_config = ConfigDict(from_attributes=True, populate_by_name=True) + + @model_validator(mode="before") + @classmethod + def extract_relationship_info(cls, data: Any) -> Any: + """Extract class_code, class_description and unit_of_measure_code from relationships""" + if isinstance(data, dict): + return data + + # It's an ORM object + result = {} + for key in cls.model_fields.keys(): + if hasattr(data, key): + result[key] = getattr(data, key) + + # Map model field names to schema field names for aliased fields + if hasattr(data, "part_number"): + result["part_number_id"] = data.part_number + if hasattr(data, "component_part_number"): + result["component_part_number_id"] = data.component_part_number + + # Extract class info + if hasattr(data, "class_info") and data.class_info is not None: + result["class_code"] = data.class_info.class_code + result["class_description"] = data.class_info.description_es + + # Extract unit of measure code + if ( + hasattr(data, "unit_of_measure_info") + and data.unit_of_measure_info is not None + ): + result["unit_of_measure_code"] = data.unit_of_measure_info.code + + return result -class ItemListResponse(BaseModel): +class LineItemListResponse(BaseModel): """Schema for paginated item list""" + total: int = Field(..., description="Total number of items") - items: list[ItemResponse] = Field(..., description="List of items") + items: list[LineItemResponse] = Field(..., description="List of items") skip: int = Field(..., description="Number of skipped items") limit: int = Field(..., description="Maximum items per page") diff --git a/backend/api/v1/modules/a76/items/service.py b/backend/api/v1/modules/a76/items/service.py index 63d1d25e..f75fa1d6 100644 --- a/backend/api/v1/modules/a76/items/service.py +++ b/backend/api/v1/modules/a76/items/service.py @@ -1,12 +1,15 @@ """ Service layer for Items business logic -Handles CRUD operations for Item with complete one-to-one relationships: -Item -> LineItem -> LineFinancial - -> LineQuantity - -> LineCustoms - -> LineDescription - -> LineReference - -> FaLineItem (Fixed Assets - a24) +Handles CRUD operations for LineItem with complete one-to-one relationships: +LineItem -> LineFinancial + -> LineQuantity + -> LineCustoms + -> LineDescription + -> LineReference + -> FaLineItem (Fixed Assets - a24) + +After refactoring: LineItem is the main entity, representing a single line item in an invoice. +There is no intermediate Item entity anymore. Each LineItem belongs directly to an InvoiceHeader. """ import logging @@ -24,18 +27,16 @@ from core.exceptions import ErrorCollector from .imports.temporary.validators.create import validate_create from .imports.temporary.validators.update import validate_update -from api.v1.modules.a76.items.line_items.schemas import LineItemCreate, LineItemUpdate - -from .schemas import ItemCreate, ItemUpdate -from .line_items.models import LineItem +from .schemas import LineItemCreate, LineItemUpdate from .line_financials.models import LineFinancial from .line_quantities.models import LineQuantity from .line_customs.models import LineCustom from .line_descriptions.models import LineDescription from .line_references.models import LineReference from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem -from .models import Item +from .models import LineItem from api.v1.modules.a76.invoices.models import InvoiceHeader +from api.v1.modules.a76.parts.models import Part logger = logging.getLogger(__name__) @@ -45,6 +46,33 @@ class ItemService: Service for managing Items and related entities with tenant/company isolation """ + @staticmethod + def _resolve_part_number( + db: Session, + part_number: Optional[str], + tenant_id: int, + company_id: int, + ) -> Optional[int]: + """Try to resolve a part number string to its database ID.""" + if not part_number: + return None + + # If it's already an integer (or a string representing an integer), it might be the ID + try: + return int(part_number) + except (ValueError, TypeError): + # It's a string part number (e.g., "MAQ-001"), look it up + part = ( + db.query(Part) + .filter( + Part.part_number == part_number, + Part.tenant_id == tenant_id, + Part.company_id == company_id, + ) + .first() + ) + return part.id if part else None + @staticmethod def _get_next_line_number(db: Session, invoice_id: int) -> int: """Calculate the next line_number for a given invoice based on database.""" @@ -52,8 +80,7 @@ class ItemService: max_line = ( db.query(func.max(LineItem.line_number)) - .join(Item, LineItem.item_id == Item.id) - .filter(Item.invoice_id == invoice_id) + .filter(LineItem.invoice_id == invoice_id) .scalar() ) @@ -62,12 +89,15 @@ class ItemService: @staticmethod def _renumber_all_invoice_lines(db: Session, invoice_id: int) -> None: """Renumber all line_items for a given invoice to be consecutive (1, 2, 3, ...).""" - items = db.query(Item).filter(Item.invoice_id == invoice_id).all() - all_lines = [line for item in items for line in item.lines] - all_lines.sort(key=lambda x: x.line_number if x.line_number else 0) + items = ( + db.query(LineItem) + .filter(LineItem.invoice_id == invoice_id) + .order_by(LineItem.line_number) + .all() + ) - for idx, line in enumerate(all_lines, start=1): - line.line_number = idx + for idx, item in enumerate(items, start=1): + item.line_number = idx @staticmethod def _lock_invoice( @@ -143,24 +173,24 @@ class ItemService: @staticmethod def get_by_id( db: Session, item_id: int, tenant_id: int, company_id: int - ) -> Optional[Item]: + ) -> Optional[LineItem]: """Get an item by ID with tenant/company validation""" return ( - db.query(Item) + db.query(LineItem) .options( - joinedload(Item.lines).joinedload(LineItem.financial), - joinedload(Item.lines).joinedload(LineItem.quantity), - joinedload(Item.lines).joinedload(LineItem.customs), - joinedload(Item.lines).joinedload(LineItem.description), - joinedload(Item.lines).joinedload(LineItem.reference), - joinedload(Item.lines).joinedload(LineItem.class_info), - joinedload(Item.lines).joinedload(LineItem.unit_of_measure_info), - joinedload(Item.lines).joinedload(LineItem.fa_data), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), + joinedload(LineItem.customs), + joinedload(LineItem.description), + joinedload(LineItem.reference), + joinedload(LineItem.class_info), + joinedload(LineItem.unit_of_measure_info), + joinedload(LineItem.fa_data), ) .filter( - Item.id == item_id, - Item.tenant_id == tenant_id, - Item.company_id == company_id, + LineItem.id == item_id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, ) .first() ) @@ -173,42 +203,42 @@ class ItemService: skip: int = 0, limit: int = 100, filters: Optional[dict] = None, - ) -> Tuple[List[Item], int]: + ) -> Tuple[List[LineItem], int]: """Get all items for a tenant/company with pagination and optional filters""" query = ( - db.query(Item) + db.query(LineItem) .options( - joinedload(Item.lines).joinedload(LineItem.financial), - joinedload(Item.lines).joinedload(LineItem.quantity), - joinedload(Item.lines).joinedload(LineItem.customs), - joinedload(Item.lines).joinedload(LineItem.description), - joinedload(Item.lines).joinedload(LineItem.reference), - joinedload(Item.lines).joinedload(LineItem.class_info), - joinedload(Item.lines).joinedload(LineItem.unit_of_measure_info), - joinedload(Item.lines).joinedload(LineItem.fa_data), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), + joinedload(LineItem.customs), + joinedload(LineItem.description), + joinedload(LineItem.reference), + joinedload(LineItem.class_info), + joinedload(LineItem.unit_of_measure_info), + joinedload(LineItem.fa_data), ) .filter( - Item.tenant_id == tenant_id, - Item.company_id == company_id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, ) ) # Apply filters if provided if filters: if filters.get("invoice_id"): - query = query.filter(Item.invoice_id == filters["invoice_id"]) + query = query.filter(LineItem.invoice_id == filters["invoice_id"]) if filters.get("item_type"): - query = query.filter(Item.item_type == filters["item_type"]) + query = query.filter(LineItem.item_type == filters["item_type"]) if filters.get("system_origin"): - query = query.filter(Item.system_origin == filters["system_origin"]) + query = query.filter(LineItem.system_origin == filters["system_origin"]) if filters.get("search"): search_term = f"%{filters['search']}%" query = query.filter( or_( - Item.invoice_id.ilike(search_term), - Item.reference_number.ilike(search_term), - Item.order.ilike(search_term), - Item.guide_number.ilike(search_term), + LineItem.invoice_id.ilike(search_term), + LineItem.reference_number.ilike(search_term), + LineItem.order.ilike(search_term), + LineItem.guide_number.ilike(search_term), ) ) @@ -224,22 +254,22 @@ class ItemService: company_id: int, skip: int = 0, limit: int = 100, - ) -> Tuple[List[Item], int]: + ) -> Tuple[List[LineItem], int]: """Get all items for a specific invoice""" query = ( - db.query(Item) + db.query(LineItem) .options( - joinedload(Item.lines).joinedload(LineItem.financial), - joinedload(Item.lines).joinedload(LineItem.quantity), - joinedload(Item.lines).joinedload(LineItem.customs), - joinedload(Item.lines).joinedload(LineItem.description), - joinedload(Item.lines).joinedload(LineItem.reference), - joinedload(Item.lines).joinedload(LineItem.fa_data), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), + joinedload(LineItem.customs), + joinedload(LineItem.description), + joinedload(LineItem.reference), + joinedload(LineItem.fa_data), ) .filter( - Item.invoice_id == invoice_id, - Item.tenant_id == tenant_id, - Item.company_id == company_id, + LineItem.invoice_id == invoice_id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, ) ) @@ -250,10 +280,10 @@ class ItemService: @staticmethod def create( db: Session, - item_data: ItemCreate, + item_data: LineItemCreate, tenant_id: int, company_id: int, - ) -> Item: + ) -> LineItem: """Create a new item with all related nested data (multiple lines)""" # Validaciones con ErrorCollector @@ -271,109 +301,85 @@ class ItemService: if not invoice_updated(db, item_data.invoice_id, tenant_id, company_id, errors): errors.raise_if_errors("Error al crear el item") - # Lock invoice and pre-calculate line_numbers + # Lock invoice and calculate line number if not ItemService._lock_invoice( db, item_data.invoice_id, tenant_id, company_id, errors ): errors.raise_if_errors("Error al crear el item") - line_numbers = [] - if item_data.lines: - starting_line = ItemService._get_next_line_number(db, item_data.invoice_id) - line_numbers = [starting_line + i for i in range(len(item_data.lines))] + # Calculate the next line number for this single item + line_number = ItemService._get_next_line_number(db, item_data.invoice_id) - # Validar cada line item que se va a crear - if item_data.lines: - for idx, line_data in enumerate(item_data.lines): - line_number = line_numbers[idx] # Usar el line_number calculado + # Resolve part ID if a string is provided in part_number (alias for part_number_id) + if item_data.part_number_id and not isinstance(item_data.part_number_id, int): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.part_number_id = resolved_id - validate_create( - db, - line_data, # Schema Pydantic completo - item_data.invoice_id, # invoice_id - tenant_id, - company_id, - errors, - line_number, - ) + # Resolve component part ID + if item_data.component_part_number_id and not isinstance( + item_data.component_part_number_id, int + ): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.component_part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.component_part_number_id = resolved_id - # Validaciones adicionales específicas del negocio - if line_data.fa_data and line_data.fa_data.is_subitem is None: - errors.add_required_error( - field=f"lines[{line_number}].fa_data.is_subitem" - ) + # Validar el item + validate_create( + db, + item_data, # Schema Pydantic completo + tenant_id, + company_id, + errors, + line_number, + ) - if line_data.fa_data and line_data.fa_data.subitem_number is None: - errors.add_required_error( - field=f"lines[{line_number}].fa_data.subitem_number" - ) + # Validaciones adicionales específicas del negocio + if item_data.fa_data and item_data.fa_data.is_subitem is None: + errors.add_required_error(field=f"fa_data.is_subitem") + + if item_data.fa_data and item_data.fa_data.subitem_number is None: + errors.add_required_error(field=f"fa_data.subitem_number") - # Validar apóstrofes en número de parte - if line_data.part_number_id and "'" in str(line_data.part_number_id): - errors.add_error( - field=f"lines[{line_number}].part_number", - message=f"Advertencia: El Número de Parte contiene apóstrofes y serán omitidos", - code="WARNING_APOSTROPHE", - ) # Si hay errores, lanzar excepción ANTES de intentar crear errors.raise_if_errors("Error al crear el item") try: - # Extract lines data - lines_data = item_data.lines or [] - item_dict = item_data.model_dump(exclude={"lines"}) + # Prepare item data + item_dict = item_data.model_dump( + exclude={ + "financial", + "quantity", + "customs", + "description", + "reference", + "fa_data", + } + ) - # Add tenant and company - item_dict["tenant_id"] = tenant_id - item_dict["company_id"] = company_id + # Add tenant, company and line number + item_dict.update( + { + "tenant_id": tenant_id, + "company_id": company_id, + "line_number": line_number, + } + ) # Create the item - db_item = Item(**item_dict) + db_item = LineItem(**item_dict) db.add(db_item) db.flush() # Get the item ID - # Create line items if provided - for idx, line_data in enumerate(lines_data): - line_dict = line_data.model_dump( - exclude={ - "financial", - "quantity", - "customs", - "description", - "reference", - "fa_data", - } - ) - line_dict.update( - { - "item_id": db_item.id, - "tenant_id": tenant_id, - "company_id": company_id, - "line_number": ( - line_numbers[idx] - if line_numbers - else ItemService._get_next_line_number( - db, item_data.invoice_id - ) - ), - } - ) - - # Map schema field names to model field names - line_dict["part_number"] = line_dict.pop("part_number_id", None) - line_dict["component_part_number"] = line_dict.pop( - "component_part_number_id", None - ) - - db_line = LineItem(**line_dict) - db.add(db_line) - db.flush() - - # Create all nested data - ItemService._create_line_nested_data( - db, db_line, line_data, tenant_id, company_id - ) + # Create all nested data + ItemService._create_line_nested_data( + db, db_item, item_data, tenant_id, company_id + ) db.commit() db.refresh(db_item) @@ -384,27 +390,27 @@ class ItemService: logger.error(f"Error creating item: {e}") raise HTTPException( status_code=400, - detail="Item creation failed - integrity constraint violated", + detail="LineItem creation failed - integrity constraint violated", ) except Exception as e: db.rollback() - logger.error(f"Unexpected error creating item: {e}") - raise HTTPException(status_code=500, detail="Error creating item") + logger.error(f"Unexpected error creating LineItem: {e}") + raise HTTPException(status_code=500, detail="Error creating LineItem") @staticmethod def update( db: Session, item_id: int, - item_data: ItemUpdate, + item_data: LineItemUpdate, tenant_id: int, company_id: int, - ) -> Item: + ) -> LineItem: """Update an item and optionally its nested data (multiple lines)""" # Get existing item db_item = ItemService.get_by_id(db, item_id, tenant_id, company_id) if not db_item: - raise HTTPException(status_code=404, detail="Item not found") + raise HTTPException(status_code=404, detail="LineItem not found") # Validaciones con ErrorCollector errors = ErrorCollector() @@ -418,143 +424,103 @@ class ItemService: ): errors.raise_if_errors("Error al actualizar el item") - # Pre-calcular line_numbers para cada línea (en update, las líneas se renumeran desde 1) - line_numbers = [] - if item_data.lines: - line_numbers = [i + 1 for i in range(len(item_data.lines))] + # Resolve part ID if a string is provided in part_number (alias for part_number_id) + if hasattr(item_data, 'part_number_id') and item_data.part_number_id and not isinstance(item_data.part_number_id, int): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.part_number_id = resolved_id - # Validar cada line item que se va a actualizar - if item_data.lines: - for idx, line_data in enumerate(item_data.lines): - line_number = line_numbers[idx] # Usar el line_number calculado + # Resolve component part ID + if hasattr(item_data, 'component_part_number_id') and item_data.component_part_number_id and not isinstance( + item_data.component_part_number_id, int + ): + resolved_id = ItemService._resolve_part_number( + db, str(item_data.component_part_number_id), tenant_id, company_id + ) + if resolved_id: + item_data.component_part_number_id = resolved_id - # Si el line tiene ID, es actualización; si no, es creación - if hasattr(line_data, "id") and line_data.id: - # Buscar el line item existente - existing_line = next( - (line for line in db_item.lines if line.id == line_data.id), - None, - ) - if existing_line: - # Validar update con línea existente - validate_update( - db, - line_data, # Schema de update - existing_line, # LineItem existente en DB - invoice_id_to_lock, # invoice_id - tenant_id, - company_id, - errors, - line_number, - ) - else: - # Es un nuevo line item, validar como creación - validate_create( - db, - line_data, # Schema Pydantic completo - invoice_id_to_lock, # invoice_id - tenant_id, - company_id, - errors, - line_number, - ) + # Validar el item que se va a actualizar + validate_update( + db, + item_data, # Schema de update + db_item, # LineItem existente en DB + tenant_id, + company_id, + errors, + db_item.line_number, + ) - # Validaciones adicionales específicas del negocio - # (Aplican tanto para crear como actualizar) - # Validar apóstrofes en número de parte - if line_data.part_number_id and "'" in str(line_data.part_number_id): + # Validar tipo de partida + if hasattr(item_data, "item_type") and item_data.item_type: + tipo_partida = item_data.item_type + if tipo_partida and tipo_partida not in ["N", "S"]: + errors.add_error( + field=f"item_type", + message=f"Tipo de partida debe ser 'N' (Normal) o 'S' (Subpartida), recibido: '{tipo_partida}'", + solution=None, + code="INVALID_ITEM_TYPE", + value=str(tipo_partida), + ) + + # Si es subpartida (S), debe tener partida principal + if tipo_partida == "S": + if not hasattr(item_data, "main_line_id") or not item_data.main_line_id: errors.add_error( - field=f"lines[{line_number}].part_number", - message=f"Advertencia: El Número de Parte contiene apóstrofes y serán omitidos", + field=f"main_line_id", + message="Las subpartidas (tipo 'S') deben tener una partida principal", solution=None, - code="WARNING_APOSTROPHE", + code="MISSING_MAIN_LINE", ) - # Validar tipo de partida - if hasattr(line_data, "item_type"): - tipo_partida = line_data.item_type - if tipo_partida and tipo_partida not in ["N", "S"]: - errors.add_error( - field=f"lines[{line_number}].item_type", - message=f"Tipo de partida debe ser 'N' (Normal) o 'S' (Subpartida), recibido: '{tipo_partida}'", - solution=None, - code="INVALID_ITEM_TYPE", - value=str(tipo_partida), - ) - - # Si es subpartida (S), debe tener partida principal - if tipo_partida == "S": - if ( - not hasattr(line_data, "main_line_id") - or not line_data.main_line_id - ): - errors.add_error( - field=f"lines[{line_number}].main_line_id", - message="Las subpartidas (tipo 'S') deben tener una partida principal", - solution=None, - code="MISSING_MAIN_LINE", - ) - # Si hay errores, lanzar excepción ANTES de actualizar errors.raise_if_errors("Error al actualizar el item") try: - - # Extract lines data - lines_data = item_data.lines - item_dict = item_data.model_dump(exclude={"lines"}, exclude_unset=True) + # Get item data excluding nested objects + item_dict = item_data.model_dump( + exclude={ + "financial", + "quantity", + "customs", + "description", + "reference", + "fa_data", + }, + exclude_unset=True, + ) # Update item fields for key, value in item_dict.items(): setattr(db_item, key, value) - # Update lines if provided (replace all lines) - if lines_data is not None: - # Delete existing lines (cascade will handle nested data) - for existing_line in db_item.lines: - db.delete(existing_line) - db.flush() + # Delete existing nested data + db.query(LineFinancial).filter( + LineFinancial.item_line_id == db_item.id + ).delete() + db.query(LineQuantity).filter( + LineQuantity.item_line_id == db_item.id + ).delete() + db.query(LineCustom).filter(LineCustom.item_line_id == db_item.id).delete() + db.query(LineDescription).filter( + LineDescription.item_line_id == db_item.id + ).delete() + db.query(LineReference).filter( + LineReference.item_line_id == db_item.id + ).delete() + db.query(FaLineItem).filter(FaLineItem.id == db_item.id).delete() + db.flush() - # Create new lines - for idx, line_data in enumerate(lines_data): - line_dict = line_data.model_dump( - exclude={ - "financial", - "quantity", - "customs", - "description", - "reference", - "fa_data", - }, - exclude_unset=True, - ) - line_dict.update( - { - "item_id": db_item.id, - "tenant_id": tenant_id, - "company_id": company_id, - "line_number": idx + 1, - } - ) + # Create new nested data + ItemService._create_line_nested_data( + db, db_item, item_data, tenant_id, company_id + ) - # Map schema field names to model field names - line_dict["part_number"] = line_dict.pop("part_number_id", None) - line_dict["component_part_number"] = line_dict.pop( - "component_part_number_id", None - ) - - db_line = LineItem(**line_dict) - db.add(db_line) - db.flush() - - # Create all nested data - ItemService._create_line_nested_data( - db, db_line, line_data, tenant_id, company_id - ) - - # Renumber all lines for this invoice to ensure consecutive numbering - ItemService._renumber_all_invoice_lines(db, db_item.invoice_id) + # Renumber all lines for this invoice to ensure consecutive numbering + ItemService._renumber_all_invoice_lines(db, db_item.invoice_id) db.commit() db.refresh(db_item) diff --git a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py index 796bfee1..c9718994 100644 --- a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py +++ b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_decrementables.py @@ -17,10 +17,10 @@ class PedimentoDecrementablesBase(BaseModel): others: Optional[Decimal] = Field(None, description="Others") currency: Optional[str] = Field(None, max_length=3, description="Currency") currency_factor: Optional[Decimal] = Field(None, description="Currency factor") - not_affect_usd_value: Optional[bool] = Field( + not_affect_usd_value: Optional[int] = Field( None, description="Not affect USD value" ) - not_affect_customs_value: Optional[bool] = Field( + not_affect_customs_value: Optional[int] = Field( None, description="Not affect customs value" ) @@ -41,8 +41,8 @@ class PedimentoDecrementablesUpdate(BaseModel): others: Optional[Decimal] = None currency: Optional[str] = Field(None, max_length=3) currency_factor: Optional[Decimal] = None - not_affect_usd_value: Optional[bool] = None - not_affect_customs_value: Optional[bool] = None + not_affect_usd_value: Optional[int] = None + not_affect_customs_value: Optional[int] = None class PedimentoDecrementablesResponse(PedimentoDecrementablesBase): diff --git a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py index c8100d01..acc6312e 100644 --- a/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py +++ b/backend/api/v1/modules/a76/pedmientos/dtos/pedimento_incrementables.py @@ -18,10 +18,10 @@ class PedimentoIncrementablesBase(BaseModel): deductibles: Optional[Decimal] = Field(None, description="Deductibles") currency: Optional[str] = Field(None, max_length=3, description="Currency") currency_factor: Optional[Decimal] = Field(None, description="Currency factor") - not_affect_usd_value: Optional[bool] = Field( + not_affect_usd_value: Optional[int] = Field( None, description="Not affect USD value" ) - not_affect_customs_value: Optional[bool] = Field( + not_affect_customs_value: Optional[int] = Field( None, description="Not affect customs value" ) @@ -43,8 +43,8 @@ class PedimentoIncrementablesUpdate(BaseModel): deductibles: Optional[Decimal] = None currency: Optional[str] = Field(None, max_length=3) currency_factor: Optional[Decimal] = None - not_affect_usd_value: Optional[bool] = None - not_affect_customs_value: Optional[bool] = None + not_affect_usd_value: Optional[int] = None + not_affect_customs_value: Optional[int] = None class PedimentoIncrementablesResponse(PedimentoIncrementablesBase): diff --git a/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py b/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py index 9a5fda2f..66f92514 100644 --- a/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py +++ b/backend/api/v1/modules/a76/pedmientos/models/pedimento_rectification_origin.py @@ -40,21 +40,21 @@ class PedimentoRectificationOrigin(Base, TenantScopedMixin, TimestampMixin): id: Mapped[int] = mapped_column(Integer) pedimento_id: Mapped[int] = mapped_column(Integer, nullable=False) - original_pedimento_year: Mapped[str] = mapped_column(String(2)) - original_customs_office: Mapped[str] = mapped_column(String(3)) - original_license: Mapped[str] = mapped_column(String(4)) - original_pedimento_number: Mapped[str] = mapped_column(String(7)) - original_pedimento_code: Mapped[str] = mapped_column(String(2)) - original_payment_date: Mapped[datetime] = mapped_column(DateTime) - total_cash: Mapped[int] = mapped_column(Integer) - total_others: Mapped[int] = mapped_column(Integer) - reason: Mapped[str] = mapped_column(String(255)) - charge_to_client: Mapped[int] = mapped_column(SmallInteger) - use_original_payment_date_for_interest_calc: Mapped[int] = mapped_column( - SmallInteger + original_pedimento_year: Mapped[str | None] = mapped_column(String(2), nullable=True) + original_customs_office: Mapped[str | None] = mapped_column(String(3), nullable=True) + original_license: Mapped[str | None] = mapped_column(String(4), nullable=True) + original_pedimento_number: Mapped[str | None] = mapped_column(String(7), nullable=True) + original_pedimento_code: Mapped[str | None] = mapped_column(String(2), nullable=True) + original_payment_date: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + total_cash: Mapped[int | None] = mapped_column(Integer, nullable=True) + total_others: Mapped[int | None] = mapped_column(Integer, nullable=True) + reason: Mapped[str | None] = mapped_column(String(255), nullable=True) + charge_to_client: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) + use_original_payment_date_for_interest_calc: Mapped[int | None] = mapped_column( + SmallInteger, nullable=True ) - manual_calculation: Mapped[int] = mapped_column(SmallInteger) - original_pedimento_norms: Mapped[int] = mapped_column(SmallInteger) + manual_calculation: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) + original_pedimento_norms: Mapped[int | None] = mapped_column(SmallInteger, nullable=True) pedimento: Mapped["Pedimentos"] = relationship( "Pedimentos", back_populates="pedimento_rectification_origin" diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py index b6538b9c..eab865ff 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_destination.py @@ -28,6 +28,7 @@ class PedimentoRectificationDestinationService: .filter( PedimentoRectificationDestination.pedimento_id == pedimento_id, PedimentoRectificationDestination.tenant_id == tenant_id, + PedimentoRectificationDestination.company_id == company_id, ) .first() ) diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py index b92db00e..39304792 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimento_rectification_origin.py @@ -26,6 +26,7 @@ class PedimentoRectificationOriginService: .filter( PedimentoRectificationOrigin.pedimento_id == pedimento_id, PedimentoRectificationOrigin.tenant_id == tenant_id, + PedimentoRectificationOrigin.company_id == company_id, ) .first() ) diff --git a/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py b/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py index 31a1f658..92f4d00f 100644 --- a/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py +++ b/backend/api/v1/modules/a76/pedmientos/services/pedimentos.py @@ -148,7 +148,7 @@ class PedimentosService: Pedimento or None if not found """ query = db.query(Pedimentos).filter( - Pedimentos.id == pedimento_id, Pedimentos.tenant_id == tenant_id, Pedimentos.company_id == company_id + Pedimentos.id == pedimento_id, Pedimentos.tenant_id == tenant_id ) if company_id is not None: @@ -199,6 +199,25 @@ class PedimentosService: Created pedimento """ try: + # Check for existing pedimento with same key (Year, Aduana, Patente, Number) + # This avoids IntegrityError in many cases and provides a better error message. + existing = db.query(Pedimentos).filter( + Pedimentos.tenant_id == tenant_id, + Pedimentos.company_id == company_id, + Pedimentos.year == pedimento_data.year, + Pedimentos.customs_office == pedimento_data.customs_office, + Pedimentos.license == pedimento_data.license, + Pedimentos.pedimento_number == pedimento_data.pedimento_number, + Pedimentos.deleted_at.is_(None) + ).first() + + if existing: + raise ValueError( + f"Ya existe un pedimento con estos datos: {pedimento_data.year}-{pedimento_data.customs_office}-{pedimento_data.license}-{pedimento_data.pedimento_number}" + ) + + # Extraer datos de tablas relacionadas + # Extraer datos de tablas relacionadas related_data = { 'pedimento_dates': pedimento_data.pedimento_dates, @@ -329,11 +348,23 @@ class PedimentosService: except IntegrityError as e: db.rollback() - # Detectar si es un error de pedimento duplicado - error_msg = str(e.orig) - if 'pedimentos_unique_key' in error_msg or 'duplicate key value violates unique constraint' in error_msg: - logger.warning(f"Attempted to create duplicate pedimento: {e}") - raise ValueError("Ya existe un pedimento con estos datos (Año, Aduana, Patente, Número)") + # Detectar si es un error de integridad de duplicados o similar + error_msg = str(e.orig).lower() + + # Case-insensitive check and support for both Spanish and English common error patterns + is_unique_violation = any(kw in error_msg for kw in [ + 'pedimentos_unique_key', + 'unique constraint', + 'duplicate key', + 'duplicada', + 'unicidad', + 'ya existe' + ]) + + if is_unique_violation: + logger.warning(f"Attempted to create duplicate pedimento or common record: {e}") + raise ValueError("Ya existe un pedimento o registro relacionado con estos datos. Verifica los campos únicos.") + logger.error(f"Integrity error creating pedimento: {e}") raise except Exception as e: @@ -363,6 +394,9 @@ class PedimentosService: if not pedimento: return None + # Ensure company_id is set from the existing record + company_id = pedimento.company_id + try: # Actualizar campos principales del pedimento update_data = pedimento_data.model_dump(exclude_unset=True, exclude={ diff --git a/backend/api/v1/modules/a76/reports/exportacion/aviso_consolidado/service.py b/backend/api/v1/modules/a76/reports/exportacion/aviso_consolidado/service.py index 9f96a81e..3671361f 100644 --- a/backend/api/v1/modules/a76/reports/exportacion/aviso_consolidado/service.py +++ b/backend/api/v1/modules/a76/reports/exportacion/aviso_consolidado/service.py @@ -17,7 +17,7 @@ from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.pedmientos.models.pedimentos import Pedimentos from api.v1.modules.a76.pedmientos.models.pedimento_validation import PedimentoValidation from api.v1.modules.a76.customs_brokers.models import CustomsBroker, CustomsBrokerPersonnel -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ClientProvider, ClientProviderAddress, ClientProviderPrograms # --- SCHEMAS FOR TEMPLATE CONTEXT --- @@ -186,7 +186,7 @@ class AvisoConsolidadoExportacionService: logistics = header.logistics # Fetch Items associated with this invoice (MOVED UP FOR WEIGHT CALCULATION) - items = db.query(Item).filter(Item.invoice_id == invoice_id).all() + items = db.query(LineItem).filter(LineItem.invoice_id == invoice_id).all() # Peso Bruto peso_bruto_val = "0.0" @@ -194,14 +194,12 @@ class AvisoConsolidadoExportacionService: # Calculate sum from items first if items: - for item in items: - if item.lines: - for line in item.lines: - if line.quantity and line.quantity.gross_weight: - try: - calculated_gross_weight += float(line.quantity.gross_weight) - except (ValueError, TypeError): - pass + for item in items: + if item.quantity and item.quantity.gross_weight: + try: + calculated_gross_weight += float(item.quantity.gross_weight) + except (ValueError, TypeError): + pass if financials and financials.gross_weight and float(financials.gross_weight) > 0: peso_bruto_val = f"{financials.gross_weight:,.2f}" @@ -379,20 +377,19 @@ class AvisoConsolidadoExportacionService: cant_total = 0.0 if items: - for item in items: - if item.lines: - for line in item.lines: - # Priority: Quantity (UMA or Standard) - q = 0.0 - if line.quantity: - try: - if line.quantity.quantity_uma is not None: - q = float(line.quantity.quantity_uma) - elif line.quantity.quantity is not None: - q = float(line.quantity.quantity) - except (ValueError, TypeError): - q = 0.0 - cant_total += q + for item in items: + for line in item: + # Priority: Quantity (UMA or Standard) + q = 0.0 + if line.quantity: + try: + if line.quantity.quantity_uma is not None: + q = float(line.quantity.quantity_uma) + elif line.quantity.quantity is not None: + q = float(line.quantity.quantity) + except (ValueError, TypeError): + q = 0.0 + cant_total += q # Format: 15 chars, 3 decimals? Actually Clarion LINEPRINT usually just prints the text. # Clarion 'CLIP(FORMAT(Loc:CantTotal,@n015.3))' removes spaces. diff --git a/backend/api/v1/modules/a76/reports/exportacion/descargo/service.py b/backend/api/v1/modules/a76/reports/exportacion/descargo/service.py index 57a8d479..960ffb30 100644 --- a/backend/api/v1/modules/a76/reports/exportacion/descargo/service.py +++ b/backend/api/v1/modules/a76/reports/exportacion/descargo/service.py @@ -15,10 +15,9 @@ from datetime import datetime # --- MODELOS (Imported from system for Header info) --- from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceComplianceMx from api.v1.modules.a76.general_catalogs.company.models import Company -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.items.line_quantities.models import LineQuantity from api.v1.modules.a76.parts.models import Part -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.pedmientos.models.pedimentos import Pedimentos from api.v1.modules.a76.pedmientos.models.pedimento_dates import PedimentoDates from api.v1.modules.core.tenants.models import Tenant @@ -40,8 +39,8 @@ class FIFOAssignmentService: Returns a list of calculated discharges. """ # 1. Get Export Lines - export_lines = db.query(LineItem).join(Item).filter( - Item.invoice_id == invoice_id + export_lines = db.query(LineItem).join(LineItem).filter( + LineItem.invoice_id == invoice_id ).options( joinedload(LineItem.quantity), joinedload(LineItem.description), @@ -58,7 +57,7 @@ class FIFOAssignmentService: if qty_needed <= 0: continue - part_number = exp_line.part_number + part_number = exp_line.part_number_id if not part_number: self._log(f"Skipping line {exp_line.id}, no part number") continue @@ -79,10 +78,10 @@ class FIFOAssignmentService: # 2. Find Import Candidates (FIFO order by payment date) # Use outerjoin for pedimento dates to avoid filtering out candidates with missing dates - candidates = db.query(LineItem).join(Item).join(InvoiceHeader)\ + candidates = db.query(LineItem).join(InvoiceHeader)\ .join(InvoiceComplianceMx).join(InvoiceComplianceMx.pedimento).outerjoin(Pedimentos.pedimento_dates)\ .filter( - LineItem.part_number == part_number, + LineItem.part_number_id == part_number, InvoiceHeader.operation_type == 'imp', # Assuming 'imp' is the value for Import based on Enum ).order_by( PedimentoDates.payment_date.asc() @@ -90,7 +89,7 @@ class FIFOAssignmentService: joinedload(LineItem.quantity), joinedload(LineItem.customs), joinedload(LineItem.financial), - joinedload(LineItem.item).joinedload(Item.invoice).joinedload(InvoiceHeader.compliance_mx).joinedload(InvoiceComplianceMx.pedimento).joinedload(Pedimentos.pedimento_dates) + joinedload(LineItem.item).joinedload(LineItem.invoice).joinedload(InvoiceHeader.compliance_mx).joinedload(InvoiceComplianceMx.pedimento).joinedload(Pedimentos.pedimento_dates) ).all() self._log(f"Found {len(candidates)} candidates for {part_number}") @@ -259,16 +258,15 @@ class DescargaReportService: # --- 2. Obtener Líneas de Exportación (Lo que necesitamos cubrir) --- if progress_callback: progress_callback(20, "Obteniendo items a exportar...") - export_lines = db.query(LineItem).filter( - LineItem.item_id == Item.id, - Item.invoice_id == invoice_id + export_lines = db.query(LineItem).filter( + LineItem.invoice_id == invoice_id ).options( joinedload(LineItem.quantity), joinedload(LineItem.customs), joinedload(LineItem.description), joinedload(LineItem.unit_of_measure_info), joinedload(LineItem.part_info) - ).join(Item).all() + ).join(LineItem).all() items_reporte = [] diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/__init__.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/processors.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/processors.py new file mode 100644 index 00000000..9500fea6 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/processors.py @@ -0,0 +1,356 @@ +from typing import List, Dict, Any, Tuple +from sqlalchemy.orm import Session, joinedload + +from .schemas import Mainx30GenerationRequest, ErrorValidacion + +# --- MODELOS A76 --- +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceComplianceMx +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.clients_and_providers.models import ClientProvider + +class ScaiiProcessor: + def __init__(self): + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total_factura = 0.0 + self.peso_bruto_factura = 0.0 + self.peso_neto_factura = 0.0 + self.errores: List[ErrorValidacion] = [] + + def _obtener_datos_cliente(self, cliente: ClientProvider) -> dict: + """Extrae de manera segura los datos del cliente/dirección""" + # Determine Tax ID: RFC for MX, Tax ID for others + address = cliente.address + pais_raw = (address.country or "MX").upper() + + pais = "MX" + if pais_raw in ["MEXICO", "MEX", "MX"]: + pais = "MX" + elif pais_raw in ["USA", "US", "UNITED STATES"]: + pais = "US" + else: + pais = pais_raw[:2] + + tax_id = "" + if pais == "MX": + tax_id = cliente.rfc or "" + else: + # Try generic tax_id field if exists, else generic field or RFC as fallback + # Providing a fallback to extra_information or web_key if needed, but per model inspection: + # We don't see a specific 'tax_id' field in ClientProvider model snippet. + # We see 'rfc'. Let's use RFC as generic holder or look for 'tax_id' if I missed it. + # Re-reading model: rfc is the only obvious one. + # Let's use RFC field for foreign tax id too unless instructed otherwise. + tax_id = cliente.rfc or "" + + data = { + "nombre": (cliente.name or "")[:39], + "tax_id": tax_id[:15], + "broker": "", "calle": "", "cp": "", "ciudad": "", "estado": "", "pais": pais, "tel": "" + } + + if cliente.programs: + data["broker"] = (cliente.programs.broker or "")[:6] + + if address: + calle_comp = f"{address.streets or ''} {address.exterior_number or ''}".strip() + data["calle"] = calle_comp[:35] + data["cp"] = (address.postal_code or "")[:9] + data["ciudad"] = (address.city or "")[:20] + data["estado"] = (address.state or "")[:2].upper() + data["tel"] = (address.phone or "")[:15] # Remove default "000000" + + return data + + def procesar_facturas( + self, db: Session, manifiesto: str, empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + lineas = [] + self.errores = [] + + # 1. Traer Facturas del Manifiesto + facturas = db.query(InvoiceHeader).join( + InvoiceComplianceMx, InvoiceHeader.id == InvoiceComplianceMx.invoice_id + ).options( + joinedload(InvoiceHeader.financials), + joinedload(InvoiceHeader.compliance_mx) + ).filter( + InvoiceComplianceMx.manifest_number == manifiesto + ).all() + + for factura in facturas: + self.cuenta_facturas += 1 + f_val_total = 0.0 + f_pb = 0.0 + f_pn = 0.0 + f_consec_partidas = 0 + + # --- MF20 / MF22: Per-Invoice Header at Manifest Level --- + # Sample: MF20AAK22-001 I10900 1234 1234 + # Invoice(15) + Type(1?) + Port(5?) + ... + entry_port = manifiesto.replace("-", "")[:4] # or from manifest object if available here? + # Manifiesto passed to this method is just a string 'manifest_number'. + # We need to query manifest or pass it. + # Actually, `manifiesto` arg is just the number string. + # But we can pass the entry_port from service.py in empresa_dict or request? + # Let's check service.py. + + # Assuming it is in empresa_dict for now (I will add it next step) + # --- MF20 / MF22: Per-Invoice Header at Manifest Level --- + # Sample: MF20AAK22-001 I10900 1234 1234 + + port_code = empresa_dict.get('entry_port', '')[:4] + manufacturer_id = empresa_dict.get('manufacturer_id', '')[:10] + + # Constructing line to match sample length/spacing + lineas.append( + f"MF20" + f"{factura.invoice_number[:15]:<15}" + f"I{manufacturer_id:<15}" + f"{port_code:<20}" + f"{port_code:<4}" + ) + lineas.append(f"MF22") + self.cuenta_partidas += 2 + + # --- IV01: Header de Factura --- + flete = float(factura.financials.freight) if factura.financials and factura.financials.freight else 0.0 + fecha_str = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else "000000" + + s_rfc = "" + c_rfc = "" + + if factura.compliance_mx: + if factura.compliance_mx.provider_id: + s_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_obj: s_rfc = s_obj.rfc or "" + if factura.compliance_mx.sold_to_id: + c_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_obj: c_rfc = c_obj.rfc or "" + + lineas.append( + f"IV01{factura.invoice_number[:15]:<15}" + f"{fecha_str}01 " # 6 + 3 = 9 + f"{port_code:<11}" # Port (Use same as MF20) + f"{empresa_dict.get('broker', '')[:6]:<15}" # Broker + f"{s_rfc[:12]:<12}{c_rfc[:12]:<12}" + ) + self.cuenta_partidas += 1 + + # --- IV02: Company Name --- + nombre_empresa = empresa_dict.get('nombre_empresa', '')[:40] + lineas.append(f"IV02 {nombre_empresa:<40}") + self.cuenta_partidas += 1 + + # --- IV10: Goods Description & Contact --- + # Dynamic Description from Invoice (observation_en or observation_es) + desc_global = (factura.observation_en or factura.observation_es or "")[:30] + + contacto = empresa_dict.get('responsable', '')[:30] + lineas.append(f"IV10 {desc_global:<30}{contacto:<30}") + self.cuenta_partidas += 1 + + # --- IV11: Headers --- + lineas.append(f"IV11H") + lineas.append(f"IV11F") + self.cuenta_partidas += 2 + + # --- DATOS DE DIRECCIONES (S, C, T, I) --- + # Shipper (S) -> Proveedor de la factura + if factura.compliance_mx and factura.compliance_mx.provider_id: + s_cliente = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_cliente: + s_data = self._obtener_datos_cliente(s_cliente) + calle_cp = f"{s_data['calle']} {s_data['cp']}".strip() + lineas.append(f"IV12S {s_data['nombre'][:39]:<39}") + lineas.append(f"IV13S {calle_cp[:35]:<35}") + lineas.append(f"IV14S{s_data['ciudad'][:20]:<20}{s_data['estado'][:2]}{s_data['pais'][:2]}{s_data['tel'][:15]:<15}{s_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # Consignee / Vendido A (C) + c_data = None + if factura.compliance_mx and factura.compliance_mx.sold_to_id: + c_cliente = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_cliente: + c_data = self._obtener_datos_cliente(c_cliente) + calle_cp = f"{c_data['calle']} {c_data['cp']}".strip() + lineas.append(f"IV12C {c_data['nombre'][:39]:<39}") + lineas.append(f"IV13C {calle_cp[:35]:<35}") + lineas.append(f"IV14C{c_data['ciudad'][:20]:<20}{c_data['estado'][:2]}{c_data['pais'][:2]}{c_data['tel'][:15]:<15}{c_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # Ship To / Enviado A (T) + if factura.compliance_mx and factura.compliance_mx.shipped_to_id: + t_cliente = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.shipped_to_id).first() + if t_cliente: + t_data = self._obtener_datos_cliente(t_cliente) + calle_cp = f"{t_data['calle']} {t_data['cp']}".strip() + lineas.append(f"IV12T {t_data['nombre'][:39]:<39}") + lineas.append(f"IV13T {calle_cp[:35]:<35}") + lineas.append(f"IV14T{t_data['ciudad'][:20]:<20}{t_data['estado'][:2]}{t_data['pais'][:2]}{t_data['tel'][:15]:<15}{t_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # Importer (I) - Sample shows it same as Consignee or Importer + if c_data: + # Reuse c_data calculation or re-fetch if needed. Reusing c_data structure. + calle_cp = f"{c_data['calle']} {c_data['cp']}".strip() + lineas.append(f"IV12I {c_data['nombre'][:39]:<39}") + lineas.append(f"IV13I {calle_cp[:35]:<35}") + lineas.append(f"IV14I{c_data['ciudad'][:20]:<20}{c_data['estado'][:2]}{c_data['pais'][:2]}{c_data['tel'][:15]:<15}{c_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # --- PARTIDAS (DETALLE IV20-IV27) --- + items_query = db.query(LineItem).filter( + LineItem.invoice_id == factura.id + ).options( + joinedload(LineItem.part_info), + joinedload(LineItem.description), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), # Added quantity relation + joinedload(LineItem.customs), + joinedload(LineItem.unit_of_measure_info) + ).all() + + for line in items_query: + f_consec_partidas += 1 + + part_num = line.part_info.part_number if line.part_info else "S/N" + po_num = factura.purchase_order or "" + + desc = "" + if line.description: + desc = line.description.description_english or line.description.description_spanish or "" + + # --- OBTENCIÓN DE DATOS DE LINEFINANCIAL / LINEQUANTITY --- + qty = 0.0; pb = 0.0; pn = 0.0; val_usd = 0.0 + val_no_duty = 0.0; val_packing = 0.0 + + if line.quantity: + qty = float(line.quantity.quantity or 0.0) + pb = float(line.quantity.gross_weight or 0.0) + pn = float(line.quantity.net_weight or 0.0) + + if pb == 0 and pn > 0: pb = pn + + if line.financial: + val_usd = float(line.financial.value_usd or 0.0) + val_no_duty = float(line.financial.exempt_amount_usd or 0.0) # IV24 + val_packing = float(line.financial.value_us_packing_usd or 0.0) # IV26 + + f_pb += pb + f_pn += pn + f_val_total += val_usd # Assuming Total Invoice Value is sum of line.value_usd + + # Aduanas + hts_ame = "" + pais_orig = "MX" + if line.customs: + raw_hts = line.customs.american_fraction or line.customs.fraction or "" + hts_ame = raw_hts.replace(".", "").strip() + pais_orig = (line.customs.origin_country or "MX")[:2] + + # UM + um_ame = "PC" + if line.unit_of_measure_info: + um_ame = line.unit_of_measure_info.american_code or "PC" + + # Escritura (Igual que el Clarion) + lineas.append(f"IV20{f_consec_partidas:03d} {part_num[:25]:<25}A {po_num[:20]:<20}") + lineas.append(f"IV21{' ':21}{desc[:50]:<50}") + + # IV22: Fix alignment based on sample + # Sample: N0000002235PCS000050000CN0000010000000000000000 000000549000000408 + # HTS(10?) + Val(10) + UM(3) + Cant(9) + Pais(2) + ... + + v_int = int(round(val_usd * 100)) + q_int = int(round(qty * 1000)) # Sample 000050000 for 50? 50 * 1000 = 50000. + pb_int = int(round(pb * 100)) + pn_int = int(round(pn * 100)) + + lineas.append( + f"IV22 N" # 10 spaces + N + f"{v_int:010d}" # Value (integer 10) + f"{um_ame[:3]:<3}" # UM (3) + f"{q_int:09d}" # Qty (integer 9) + f"{pais_orig[:2]:<2}" # Pais (2) + f"0000010000000000000000 " # Fixed (23 with space) + f"{pb_int:010d}" # Peso Bruto (10 chars) + f"{pn_int:010d}" # Peso Neto (10 chars) + ) + + # IV24 (No Duty / Exempt) + # Dynamic Logic: Use exempt_amount_usd if > 0 + v_nd_int = int(round(val_no_duty * 100)) + # IV24 uses same UM and Qty layout as IV22 but for NoDuty portion? + # Sample shows just value and then mostly zeros? + # Sample: IV24 0000000000 000000000 0000000000000000000000 + # We will use v_nd_int. If 0, it renders as 0000000000. + if v_nd_int > 0: + # If there IS a No Duty value, we should probably output it. + # Format seems to start at same pos as IV22 Value? + # IV22 starts value at col 20 (approx). + # IV24 starts value at col 20 (approx). + # IV24 {Val} {Qty?} ... + # Given sample: `IV24 0000000000 000000000 ...` + # It looks like: Prefix(15) + Val(10) + Space(3) + Qty??(9) + ... + # Let's mimic structure + lineas.append(f"IV24 {v_nd_int:010d} {0:09d} 0000000000000000000000") + else: + lineas.append(f"IV24 {0:010d} {0:09d} 0000000000000000000000") + + # IV26 (Packing) + # Dynamic Logic: Use value_us_packing_usd + v_p_int = int(round(val_packing * 100)) + if v_p_int > 0: + lineas.append(f"IV26 {v_p_int:010d} {0:09d} 0000000000000000000000") + else: + lineas.append(f"IV26 {0:010d} {0:09d} 0000000000000000000000") + + # IV27 (Unit Costs) + # Sample: IV27 000000000000000000000000000000000000000000000000000000000000000000 + # If we have distinct values, maybe we should calculate unit costs? + # But legacy sample shows all zeros. + # Calculating separate unit costs for Duty/NoDuty/Packing: + c_u_d = val_usd / qty if qty > 0 else 0 + c_u_nd = val_no_duty / qty if qty > 0 else 0 + c_u_p = val_packing / qty if qty > 0 else 0 + + # If user wants NO HARDCODING, maybe we should populate this? + # But sample had 0s. Let's populate specific costs if values exist, else 0. + # Format: IV27 + 10 spaces + CostDuty(11) + CostNoDuty(11) + CostPacking(11) + ... + # Based on legacy Clarion: `FORMAT(Left(Loc:CostoUDuty),@n011v5)` + + cud_int = int(round(c_u_d * 100000)) + cund_int = int(round(c_u_nd * 100000)) + cup_int = int(round(c_u_p * 100000)) + + lineas.append(f"IV27 {cud_int:011d}{cund_int:011d}{cup_int:011d}000000000000000000000000000000000") + + self.cuenta_partidas += 6 + + # --- TOTALES FACTURA --- + # Sample: IV900000700000000000000000063320000005348 + # IV90 + CantPartidas(5) + ValTotal(12) + PesoBruto(10) + PesoNeto(10) + f_val_int = int(round(f_val_total * 100)) + f_pb_int = int(round(f_pb * 100)) + f_pn_int = int(round(f_pn * 100)) + lineas.append(f"IV90{f_consec_partidas:05d}{f_val_int:012d}{f_pb_int:010d}{f_pn_int:010d}") + self.cuenta_partidas += 1 + + self.valor_total_factura += f_val_total + self.peso_bruto_factura += f_pb + self.peso_neto_factura += f_pn + + return lineas, self.errores + + def _agregar_error(self, partida, id_err, desc, sol, tipo): + self.errores.append(ErrorValidacion(partida=partida, linea=0, descripcion=f"[ {id_err} ] {desc}", soluciones=sol, identificador=tipo)) + +# (Dummy Processors para que no truene el Service) +class ScafDefProcessor: + def __init__(self): self.cuenta_partidas=0; self.cuenta_facturas=0; self.valor_total_factura=0; self.peso_bruto_factura=0; self.peso_neto_factura=0 + def procesar_facturas(self, db, manifiesto, empresa_dict, request): return [], [] + +class ScafTempProcessor: + def __init__(self): self.cuenta_partidas=0; self.cuenta_facturas=0; self.valor_total_factura=0; self.peso_bruto_factura=0; self.peso_neto_factura=0 + def procesar_facturas(self, db, manifiesto, empresa_dict, request): return [], [] \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/routes.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/routes.py new file mode 100644 index 00000000..76a916ed --- /dev/null +++ b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/routes.py @@ -0,0 +1,43 @@ +from typing import Dict, Any +from fastapi import APIRouter, Depends, Body +from celery.result import AsyncResult +from core.celery_app import celery_app +from core.security import get_current_user +from .task import generar_transmission_file_async +from .schemas import Mainx30GenerationRequest + +router = APIRouter() + +@router.get("/tasks/{task_id}") +async def get_task_status( + task_id: str, + current_user: Dict[str, Any] = Depends(get_current_user) +): + task_result = AsyncResult(task_id, app=celery_app) + + response = { + "task_id": task_id, + "state": task_result.state, + "result": None, + "info": None + } + + if task_result.state == 'FAILURE': + response["result"] = str(task_result.result) + elif task_result.state == 'SUCCESS': + response["result"] = task_result.result + elif task_result.state == 'PROCESSING': + # Ensure info is serializable + response["info"] = task_result.info + + return response + +@router.post("/generate") +async def trigger_generation( + request: Mainx30GenerationRequest, + current_user: Dict[str, Any] = Depends(get_current_user) +): + tenant_id = current_user.get("tenant_id") + # Pass request as dict to Celery task + task = generar_transmission_file_async.delay(request.model_dump(), tenant_id) + return {"task_id": task.id, "message": "Generación iniciada"} diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/schemas.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/schemas.py new file mode 100644 index 00000000..6146dae4 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/schemas.py @@ -0,0 +1,71 @@ +from typing import List, Optional, Any +from pydantic import BaseModel, Field + +class Mainx30GenerationRequest(BaseModel): + """ + Schema for the Mainx30 file generation request + """ + manifiestos: List[str] = Field(..., description="Lista de números de manifiesto a procesar") + nomenclatura_factura: bool = Field(False, description="Usar nomenclatura basada en factura") + consolidar_rbs: bool = Field(False, description="Consolidar por fracción RB System") + emanifest_fast_blanco: bool = Field(False, description="E-Manifest y FAST en blanco") + no_enviar_emanifest: bool = Field(False, description="No enviar E-Manifest") + consolidar_partidas: bool = Field(False, description="Consolidar partidas (XML OPTIMA Y RBS2)") + main_x40_emanifest: bool = Field(False, description="Main X40 E-Manifest") + main_x30_fedex: bool = Field(False, description="Main X30 (FEDEX)") + iv11: bool = Field(False, description="IV11") + iv42: bool = Field(False, description="IV42") + +class ErrorValidacion(BaseModel): + """ + Schema for validation errors during file generation + """ + partida: int + linea: int + descripcion: str + soluciones: str + identificador: str + campos: str = "" + campos2: str = "" + +class Mainx30Response(BaseModel): + """ + Schema for the generation response + """ + success: bool + message: str + task_id: Optional[str] = None + archivo_generado: Optional[str] = None + ruta_archivo: Optional[str] = None + content: Optional[str] = None + + # Statistics + cuenta_partidas: int = 0 + valor_total: float = 0.0 + flete_total: float = 0.0 + peso_bruto_total: float = 0.0 + peso_neto_total: float = 0.0 + cuenta_facturas: int = 0 + + # Validation + errores: List[ErrorValidacion] = [] + tiene_inconsistencias: bool = False + +class BrokerValidationResult(BaseModel): + es_valido: bool + mensaje_error: Optional[str] = None + broker_cliente: Optional[str] = None + +class EmpresaDatos(BaseModel): + broker: str + responsable: str + rfc: str + tiene_linea_express: str + nombre_empresa: str = "AAKRON RULE CORPORATION" + manufacturer_id: str = "I10900" + ftp_key: str = "00SCSI" + +class ConfiguracionSistema(BaseModel): + path_arch_transmision: str + utilizar_nombre_generico_mainx30: bool + utilizar_codigo_broker_cliente: bool diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/service.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/service.py new file mode 100644 index 00000000..ffe01710 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/service.py @@ -0,0 +1,300 @@ +import os +import tempfile +from datetime import date, datetime +from typing import List, Tuple, Optional +from pathlib import Path + +from sqlalchemy.orm import Session +from fastapi import HTTPException + +from .schemas import ( + Mainx30GenerationRequest, Mainx30Response, ErrorValidacion, + EmpresaDatos, ConfiguracionSistema +) + +# --- HELPERS --- +def fecha_clarion_a_iso(clarion_date): + """Convierte fecha Clarion (días desde 1800-12-28) a ISO YYYY-MM-DD""" + if not clarion_date: return "1900-01-01" + try: + from datetime import date, timedelta + base_date = date(1800, 12, 28) + delta = timedelta(days=int(clarion_date)) + return (base_date + delta).isoformat() + except: + return "1900-01-01" + +# --- MODELOS A76 --- +from api.v1.modules.a76.manifests.manifest.models import Manifest +from api.v1.modules.a76.general_catalogs.company.models import Company as GEmpresa + +# --- PROCESADORES --- +from .processors import ScaiiProcessor, ScafDefProcessor, ScafTempProcessor + +class Mainx30Service: + def __init__(self): + self.errores_validacion: List[ErrorValidacion] = [] + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + + def generar_mainx30_expo( + self, + db: Session, + request: Mainx30GenerationRequest, + task_instance=None + ) -> Mainx30Response: + try: + self._inicializar_variables() + fecha_transmision = date.today().strftime("%y%m%d") + + config_sistema = self._obtener_configuracion_sistema(db) + datos_empresa = self._obtener_datos_empresa(db) + self._validar_datos_empresa(datos_empresa) + + if not request.manifiestos: + raise HTTPException(status_code=400, detail="No se seleccionaron manifiestos") + + nombre_archivo = self._generar_nombre_archivo(config_sistema, request, request.manifiestos[0]) + lineas_archivo = [] + + # Línea A + lineas_archivo.append(self._generar_linea_a(fecha_transmision, datos_empresa)) + + for manifiesto_num in request.manifiestos: + if task_instance: + task_instance.update_state(state='PROCESSING', meta={'status': f'Procesando {manifiesto_num}'}) + + lineas_manifiesto = self._procesar_manifiesto( + db, manifiesto_num, datos_empresa, fecha_transmision, request + ) + lineas_archivo.extend(lineas_manifiesto) + + # Línea Z + lineas_archivo.append(f"Z {self.cuenta_partidas:05d}") + + ruta_completa = os.path.join("api/v1/modules/reports/generated", nombre_archivo) + self._escribir_archivo(ruta_completa, lineas_archivo) + + return Mainx30Response( + success=len(self.errores_validacion) == 0, + message=self._generar_mensaje_resultado(ruta_completa), + archivo_generado=nombre_archivo, + ruta_archivo=ruta_completa, + cuenta_partidas=self.cuenta_partidas, + valor_total=self.valor_total, + flete_total=self.flete_total, + peso_bruto_total=self.peso_bruto_total, + peso_neto_total=self.peso_neto_total, + cuenta_facturas=self.cuenta_facturas, + errores=self.errores_validacion, + tiene_inconsistencias=len(self.errores_validacion) > 0, + content="\r\n".join(lineas_archivo) + ) + + except Exception as e: + import traceback + traceback.print_exc() + raise HTTPException(status_code=500, detail=f"Error generando Mainx30: {str(e)}") + + def _inicializar_variables(self): + self.errores_validacion = [] + self.cuenta_partidas = 1 # Empieza en 1 por la línea A + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + self.cuenta_facturas = 0 + + def _procesar_manifiesto( + self, + db: Session, + manifiesto_num: str, + datos_empresa: EmpresaDatos, + fecha_transmision: str, + request: Mainx30GenerationRequest + ) -> List[str]: + lineas = [] + + # --- TABLA A76: MANIFEST --- + manifiesto = db.query(Manifest).filter( + Manifest.manifest_number == manifiesto_num + ).first() + + if not manifiesto: + self._agregar_error_validacion(0, "MF", f"Manifiesto {manifiesto_num} no encontrado.", "Verificar BD", "MANIFIESTO") + return lineas + + persona_cargo = manifiesto.person_in_charge or "" + if not persona_cargo: + self._agregar_error_validacion(0, "MF03", "Falta Persona a Cargo", "Capturar en Manifiesto", "MANIFIESTO") + + num_manifiesto_clean = manifiesto_num.replace("-", "") + + # Fecha en formato yyMMdd. Asumimos entry_date almacena Clarion Date o Timestamp. + fecha_entrada_str = "000000" + if manifiesto.entry_date: + try: + # Si es Clarion Date + fecha_iso = fecha_clarion_a_iso(manifiesto.entry_date) + fecha_entrada_str = datetime.strptime(fecha_iso, "%Y-%m-%d").strftime("%y%m%d") + except: pass + + firms_code = manifiesto.entry_port_loc or "" + entry_port = manifiesto.entry_port or "000" + + # MF01 + # Sample Clarion: MF01AKR 1234 1234 2602061233026021345 + # Layout: + # MF01 (4) + # Broker (6) -> "AKR " + # Port Ent (5) -> "1234 " + # Port Sal (5) -> "1234 " + # FecEnt (6) -> "260206" + # 12 (2) -> Prefix? + # 3 (1) -> Digit 3? + # 30 (2) -> Constant? + # FecTrans (6) -> "260213" + # Manifiesto (15?) -> "45 " (Sample has '45' at end, maybe manifest is '45'?) + + # Let's align with sample string length and fields. + # "MF01" + # Broker: Left aligned 6 chars + # Port1: Left aligned 5 chars + # Port2: Left aligned 5 chars + # Date1: 6 chars + # "12330" (Hardcoded sequence based on sample analysis vs previous logic) + # Date2: 6 chars + # Manifest: Left aligned 15 chars? Sample "45" is at end. + + # Re-analyzing sample: "MF01AKR 1234 1234 2602061233026021345" + # Length: 4+6+5+5+6+2+1+2+6+2 = 39? No. + # AKR : 6 + # 1234 : 5 + # 1234 : 5 + # 260206: 6 + # 12: 2 + # 3: 1 + # 30: 2 + # 260213: 6 + # 45: 2? + # Total: 4+6+5+5+6+5+6+2 = 39 chars displayed. + + # My generated was: MF01123 000 000 0001011230260213123456879 + # It was way off. + + man_clean = num_manifiesto_clean[:15] + + lineas.append( + f"MF01{datos_empresa.broker:<6}" + f"{entry_port:<5}" + f"{entry_port:<5}" + f"{fecha_entrada_str}" + f"12330{fecha_transmision}" # Fixed sequence "12330" inferred from sample + f"{man_clean:<15}" + ) + self.cuenta_partidas += 1 + + # MF03 + # Sample: MF03FRANCISCO 1234 + # MF03 (4) + # Person (Top Left?) + # Sample: "MF03FRANCISCO 1234" + # It seems "FRANCISCO" is right after MF03. That's the PERSON. + # "1234" is the Gafete/License. + # My previous code put Carrier first: "MF03TRUCK Lopez Doriga..." + # Correct mapping: MF03 + Person(Included Name) + License + + # Let's follow sample: + # MF03 + Person(15?) + License(15?) + # MF03 + transportista = manifiesto.carrier_code or "" + persona = persona_cargo or "" + # 'driver_license' attribute does not exist in Manifest model. + # Using 'transport_code' or similar as fallback for license/gafete. + licencia = manifiesto.transport_code or "" + + lineas.append( + f"MF03{persona[:15]:<15} {licencia[:15]:<15}" + ) + self.cuenta_partidas += 1 + + # --- PROCESAR FACTURAS --- + empresa_dict = { + 'broker': datos_empresa.broker, + 'responsable': datos_empresa.responsable, + 'rfc': datos_empresa.rfc, + 'nombre_empresa': datos_empresa.nombre_empresa, + 'entry_port': entry_port, + 'manufacturer_id': datos_empresa.manufacturer_id + } + + processor = ScaiiProcessor() + l_facturas, e_facturas = processor.procesar_facturas(db, manifiesto_num, empresa_dict, request) + + lineas.extend(l_facturas) + self.errores_validacion.extend(e_facturas) + + # Actualizar acumuladores Globales + self.cuenta_partidas += processor.cuenta_partidas + self.cuenta_facturas += processor.cuenta_facturas + self.valor_total += processor.valor_total_factura + self.peso_bruto_total += processor.peso_bruto_factura + self.peso_neto_total += processor.peso_neto_factura + + # MF80 (Totales Manifiesto) + # Sample: MF80000000000000000200000001099200000002000000009736 + # MF80 (4) + Val(12) + CantFact(4) + PB(12) + Flete(8) + PN(12) + # Importante: El sample muestra que los totales NO tienen puntos y son enteros (centavos). + val_int = int(round(processor.valor_total_factura * 100)) + pb_int = int(round(processor.peso_bruto_factura * 100)) + pn_int = int(round(processor.peso_neto_factura * 100)) + flete_int = 0 # Flete total + + lineas.append( + f"MF80{val_int:012d}" + f"{processor.cuenta_facturas:04d}" + f"{pb_int:012d}" + f"{flete_int:08d}" + f"{pn_int:012d}" + ) + self.cuenta_partidas += 1 + + return lineas + + # (Mantenemos los métodos auxiliares: _obtener_configuracion_sistema, _obtener_datos_empresa, _escribir_archivo, etc.) + def _obtener_configuracion_sistema(self, db): return ConfiguracionSistema(path_arch_transmision="/tmp", utilizar_nombre_generico_mainx30=True, utilizar_codigo_broker_cliente=False) + def _obtener_datos_empresa(self, db): + empresa = db.query(GEmpresa).first() + if not empresa: + # Fallback safe defaults if no company config found + return EmpresaDatos(broker="", responsable="", rfc="", tiene_linea_express="N", nombre_empresa="", manufacturer_id="", ftp_key="") + + return EmpresaDatos( + broker=(empresa.broker_company or "")[:5], + responsable=(empresa.responsible or "")[:30], + rfc=(empresa.rfc or "")[:13], + tiene_linea_express=empresa.has_express_line or "N", + nombre_empresa=(empresa.name or "")[:40], + manufacturer_id=(empresa.manufacturer_id or "")[:10], + ftp_key=(empresa.ftp_key or "")[:10] + ) + def _validar_datos_empresa(self, datos): pass + def _generar_nombre_archivo(self, c, r, m): return f"{m}_Mainx30.dat" + + def _generar_linea_a(self, f, d): + # Sample: A 26021203AKR AKR 00SCSI + broker = d.broker.strip()[:6] + # Use ftp_key (password?) + password = (d.ftp_key or "00SCSI")[:6] + return f"A {f}03{broker:<6}{broker:<10}{password}" + + def _escribir_archivo(self, ruta, lineas): + Path(ruta).parent.mkdir(parents=True, exist_ok=True) + with open(ruta, 'w', encoding='latin-1') as f: f.write('\r\n'.join(lineas)) + def _generar_mensaje_resultado(self, nombre): return f"Generado: {nombre}" + def _agregar_error_validacion(self, partida, id_err, desc, sol, tipo): + self.errores_validacion.append(ErrorValidacion(partida=partida, linea=0, descripcion=desc, soluciones=sol, identificador=tipo)) \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/task.py b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/task.py new file mode 100644 index 00000000..7aebc5b3 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/exportacion/transmission/MAINX30/task.py @@ -0,0 +1,46 @@ +from celery import Task +from core.celery_app import celery_app +from core.celery_app import celery_app +from core.database import get_core_db as get_db +from .service import Mainx30Service +from .schemas import Mainx30GenerationRequest, Mainx30Response + +@celery_app.task(name="generar_transmission_file_async", bind=True) +def generar_transmission_file_async(self, request_data: dict, tenant_id: int): + """ + Generates the transmission .dat file asynchronously using Mainx30Service + """ + try: + # Re-create db session for task + # Using next(get_db()) is a common pattern for obtaining a session in tasks + # but ensure context management + db = next(get_db()) + + # Deserialize request + request = Mainx30GenerationRequest(**request_data) + + service = Mainx30Service() + response = service.generar_mainx30_expo(db, request, task_instance=self) + + # Return result as dict for Celery serialization + # Ensure we return valid JSON serializable dict + result = response.model_dump() + + # If we returned content directly, encode it if it's bytes (it's str here) + if response.content: + import base64 + # Mainx30Service returns content as string with \r\n + encoded_content = base64.b64encode(response.content.encode('utf-8')).decode('utf-8') + # Add to result to match expected format by frontend dialog + result['content'] = encoded_content + result['file_name'] = response.archivo_generado + result['media_type'] = "text/plain" + + return result + + except Exception as e: + import traceback + traceback.print_exc() + self.update_state(state='FAILURE', meta={'exc_type': type(e).__name__, 'exc_message': str(e)}) + # Re-raise to mark task as failed in Celery + raise e diff --git a/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py index b27d5498..82e0c897 100644 --- a/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/consolidados/mex/service.py @@ -17,7 +17,7 @@ from api.v1.modules.a76.invoices.models import ( ) from api.v1.modules.a76.items.line_financials.models import LineFinancial from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientProviderAddress, @@ -27,7 +27,7 @@ from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -71,12 +71,18 @@ class ConsolidadoImportacionMexService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ if valor is None: - return 0.0 + valor = 0.0 try: - return round(float(valor), decimales) + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" except: - return 0.0 + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: @@ -482,8 +488,7 @@ class ConsolidadoImportacionMexService: lines = ( db.query(LineItem) - .join(Item, LineItem.item_id == Item.id) - .filter(Item.invoice_id.in_(target_invoice_ids)) + .filter(LineItem.invoice_id.in_(target_invoice_ids)) .all() ) @@ -532,7 +537,7 @@ class ConsolidadoImportacionMexService: .filter(LineFinancial.item_line_id == line.id) .first() ) - part_master = db.query(Part).filter(Part.id == line.part_number).first() + part_master = db.query(Part).filter(Part.id == line.part_number_id).first() # --- Resolver Identificadores (MOVED INSIDE MAIN LOOP) --- us_fraction_raw = "" @@ -559,7 +564,7 @@ class ConsolidadoImportacionMexService: # --- Multi-Currency Normalization Logic --- # Determine Line Currency context # Use manual lookup instead of specific attribute - invoice_id = line.item.invoice_id if line.item else None + invoice_id = line.invoice_id line_invoice = invoice_map.get(invoice_id) if invoice_id else None line_currency_is_mxn = False diff --git a/backend/api/v1/modules/a76/reports/importacion/consolidados/temporary/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/consolidados/temporary/mex/service.py index 8dde918d..17369185 100644 --- a/backend/api/v1/modules/a76/reports/importacion/consolidados/temporary/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/consolidados/temporary/mex/service.py @@ -13,7 +13,6 @@ from sqlalchemy.orm import Session from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics, InvoiceComplianceMx from api.v1.modules.a76.items.line_financials.models import LineFinancial from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientProviderAddress, ClientProviderPrograms ) @@ -21,7 +20,7 @@ from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -314,8 +313,8 @@ class ConsolidadoImportacionMexService: # NOT consolidating all invoices from the same Pedimento. target_invoice_ids = [header.id] - lines = db.query(LineItem).join(Item, LineItem.item_id == Item.id).filter( - Item.invoice_id.in_(target_invoice_ids) + lines = db.query(LineItem).filter( + LineItem.invoice_id.in_(target_invoice_ids) ).all() partidas_list = [] @@ -350,7 +349,7 @@ class ConsolidadoImportacionMexService: for line in lines: qty = db.query(LineQuantity).filter(LineQuantity.item_line_id == line.id).first() fin = db.query(LineFinancial).filter(LineFinancial.item_line_id == line.id).first() - part_master = db.query(Part).filter(Part.id == line.part_number).first() + part_master = db.query(Part).filter(Part.id == line.part_number_id).first() # --- Resolver Identificadores (MOVED INSIDE MAIN LOOP) --- us_fraction_raw = "" @@ -371,7 +370,7 @@ class ConsolidadoImportacionMexService: # --- Multi-Currency Normalization Logic --- # Determine Line Currency context # Use manual lookup instead of specific attribute - invoice_id = line.item.invoice_id if line.item else None + invoice_id = line.invoice_id line_invoice = invoice_map.get(invoice_id) if invoice_id else None line_currency_is_mxn = False diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py index 71cea05e..1163644e 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/mex/service.py @@ -13,7 +13,6 @@ from sqlalchemy.orm import Session from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics from api.v1.modules.a76.items.line_financials.models import LineFinancial from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientProviderAddress, @@ -23,7 +22,7 @@ from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -36,6 +35,7 @@ from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.models impor # --- MODELO DE UNIDADES DE MEDIDA --- from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure +from api.v1.modules.a76.general_catalogs.packages.models import Package # --- SCHEMAS --- from .schemas import ( @@ -103,12 +103,18 @@ class FacturaImportacionMexService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ if valor is None: - return 0.0 + valor = 0.0 try: - return round(float(valor), decimales) + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" except: - return 0.0 + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: @@ -422,9 +428,8 @@ class FacturaImportacionMexService: if progress_callback: progress_callback(50, "Procesando partidas...") lines = ( - db.query(LineItem) - .join(Item, LineItem.item_id == Item.id) - .filter(Item.invoice_id == header.id) + db.query(LineItem) + .filter(LineItem.invoice_id == header.id) .all() ) partidas_list = [] @@ -440,10 +445,10 @@ class FacturaImportacionMexService: .filter(LineFinancial.item_line_id == line.id) .first() ) - part_master = db.query(Part).filter(Part.id == line.part_number).first() + part_master = db.query(Part).filter(Part.id == line.part_number_id).first() desc_final = "S/D" - num_parte_final = str(line.part_number or "S/N") + num_parte_final = str(line.part_number_id or "S/N") fraccion_raw = "" origen_final = "MEX" @@ -533,7 +538,7 @@ class FacturaImportacionMexService: if uom: unidad_desc = uom.description or uom.code else: - unidad_desc = "" + unidad_desc = "" partidas_list.append( PartidaSchema( @@ -552,7 +557,7 @@ class FacturaImportacionMexService: if qty and qty.package_quantity else 0 ), - clave_bultos=(qty.package_key or "") if qty else "", + clave_bultos=(qty.package_info.key if (qty and qty.package_info) else ""), peso_neto=self.formatear_numero(qty.net_weight if qty else 0), peso_bruto=self.formatear_numero( qty.gross_weight if qty else 0 diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py b/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py index 324bb91a..12595fda 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/routes.py @@ -41,9 +41,10 @@ async def trigger_descarga_factura( invoice_id: int, company_id: int = Query(..., description="ID de la empresa"), invoice_type: str = Query('mexican', description="Tipo de factura: 'mexican' o 'american'"), + currency_code: str = Query('ORIGINAL', description="Moneda: 'MXN', 'USD', o 'ORIGINAL'"), current_user: Dict[str, Any] = Depends(get_current_user), db: Session = Depends(get_core_db) ): validate_access_to_resource(db, company_id, current_user) - task = generar_pdf_factura_async.delay(invoice_id, company_id, invoice_type) + task = generar_pdf_factura_async.delay(invoice_id, company_id, invoice_type, currency_code) return {"task_id": task.id, "message": "Generación iniciada"} \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/temporary/mex/service.py b/backend/api/v1/modules/a76/reports/importacion/facturas/temporary/mex/service.py index 69f49a02..b61c2c87 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/temporary/mex/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/temporary/mex/service.py @@ -13,7 +13,6 @@ from sqlalchemy.orm import Session from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics from api.v1.modules.a76.items.line_financials.models import LineFinancial from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientProviderAddress, ClientProviderPrograms ) @@ -21,7 +20,7 @@ from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -227,16 +226,16 @@ class FacturaImportacionMexService: ) if progress_callback: progress_callback(50, "Procesando partidas...") - lines = db.query(LineItem).join(Item, LineItem.item_id == Item.id).filter(Item.invoice_id == header.id).all() + lines = db.query(LineItem).filter(LineItem.invoice_id == header.id).all() partidas_list = [] for line in lines: qty = db.query(LineQuantity).filter(LineQuantity.item_line_id == line.id).first() fin = db.query(LineFinancial).filter(LineFinancial.item_line_id == line.id).first() - part_master = db.query(Part).filter(Part.id == line.part_number).first() + part_master = db.query(Part).filter(Part.id == line.part_number_id).first() desc_final = "S/D" - num_parte_final = str(line.part_number or "S/N") + num_parte_final = str(line.part_number_id or "S/N") fraccion_raw = "" origen_final = "MEX" @@ -316,7 +315,7 @@ class FacturaImportacionMexService: cantidad_importacion=self.formatear_numero(qty.quantity if qty else 0), unidad_medida=qty.weight_unit if qty else "PZA", cantidad_bultos=int(qty.package_quantity) if qty and qty.package_quantity else 0, - clave_bultos=(qty.package_key or "") if qty else "", + clave_bultos=(qty.package_info.key if (qty and qty.package_info) else ""), peso_neto=self.formatear_numero(qty.net_weight if qty else 0), peso_bruto=self.formatear_numero(qty.gross_weight if qty else 0), valor_costo_unitario=self.formatear_numero(v_unitario), diff --git a/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py b/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py index fe840c97..951a3135 100644 --- a/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/facturas/usa/service.py @@ -10,18 +10,19 @@ from fastapi import HTTPException from sqlalchemy.orm import Session # --- MODELOS --- -from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics from api.v1.modules.a76.items.line_financials.models import LineFinancial from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( - ClientProvider, ClientProviderAddress, ClientProviderPrograms + ClientProvider, + ClientProviderAddress, + ClientProviderPrograms, ) from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -30,32 +31,38 @@ from api.v1.modules.a76.transportation.trailers.models import Trailer from api.v1.modules.a76.transportation.drivers.models import Driver # --- MODELO DE FRACCIONES --- -from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.models import TariffFraction +from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.models import ( + TariffFraction, +) # --- SCHEMAS --- # Reuse schemas from neighbor package as they fit the same data structure from ..mex.schemas import ( - ClienteSchema, PartidaSchema, TotalesSchema, - FacturaSchema, FacturaImportacionCompleta + ClienteSchema, + PartidaSchema, + TotalesSchema, + FacturaSchema, + FacturaImportacionCompleta, ) + class FacturaImportacionUsaService: def __init__(self): self.template_dir = Path(__file__).parent.parent / "templates" self.jinja_env = Environment( loader=FileSystemLoader(self.template_dir), - autoescape=select_autoescape(['html', 'xml']) + autoescape=select_autoescape(["html", "xml"]), ) - self.template = self.jinja_env.get_template('factura_usa_ver.html') + self.template = self.jinja_env.get_template("factura_usa_ver.html") def _get_document_title(self, invoice_type: str, is_american: bool = True) -> str: """ Determina el título del documento basado en el tipo de factura. - + Args: invoice_type: Tipo de factura (TEM, DEF, MEX, CR) is_american: Si es factura americana (True) o mexicana (False) - + Returns: Título formateado para la factura """ @@ -66,7 +73,7 @@ class FacturaImportacionUsaService: "TEM": "Importación Temporal", "CR": "Importación de Cambio de Régimen", } - + # Mapeo para facturas americanas american_titles = { "MEX": "Mexican Purchases Import Invoice", @@ -74,18 +81,18 @@ class FacturaImportacionUsaService: "TEM": "Temporary Importation", "CR": "Regime Change Importation", } - + # Seleccionar el mapa correcto titles = american_titles if is_american else mexican_titles - + # Obtener el título (normalizar a mayúsculas) invoice_type_upper = invoice_type.upper() if invoice_type else "" title = titles.get(invoice_type_upper, "") - + # Fallback a genéricos si no se encuentra if not title: return "Commercial Invoice" if is_american else "Factura de Importación" - + return title def _get_wkhtmltopdf_config(self): @@ -95,28 +102,50 @@ class FacturaImportacionUsaService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): - if valor is None: return 0.0 + if valor is None: + valor = 0.0 try: - return round(float(valor), decimales) - except: return 0.0 + num = round(float(valor), decimales) + return f"{num:,.{decimales}f}" + except: + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: return fraccion_raw return f"{fraccion_raw[:4]}.{fraccion_raw[4:6]}.{fraccion_raw[6:]}" - def _obtener_datos_cliente(self, db: Session, client_id: int, rol: str) -> ClienteSchema: + def _obtener_datos_cliente( + self, db: Session, client_id: int, rol: str + ) -> ClienteSchema: main = db.query(ClientProvider).filter(ClientProvider.id == client_id).first() if not main: - return ClienteSchema(header=rol, nombre="Unknown", direccion="", tax_id="", codigo_postal="", ciudad="", estado="", pais="USA") - - addr = db.query(ClientProviderAddress).filter(ClientProviderAddress.client_id == client_id).first() - prog = db.query(ClientProviderPrograms).filter(ClientProviderPrograms.client_id == client_id).first() + return ClienteSchema( + header=rol, + nombre="Unknown", + direccion="", + tax_id="", + codigo_postal="", + ciudad="", + estado="", + pais="USA", + ) + + addr = ( + db.query(ClientProviderAddress) + .filter(ClientProviderAddress.client_id == client_id) + .first() + ) + prog = ( + db.query(ClientProviderPrograms) + .filter(ClientProviderPrograms.client_id == client_id) + .first() + ) return ClienteSchema( header=rol, nombre=(main.name or main.short_name) or "N/A", - direccion=(addr.streets or "") if addr else "", + direccion=(addr.streets or "") if addr else "", num_exterior=(addr.exterior_number or "") if addr else "", num_interior=(addr.interior_number or "") if addr else "", colonia=(addr.neighborhood or "") if addr else "", @@ -124,58 +153,128 @@ class FacturaImportacionUsaService: ciudad=(addr.city or "") if addr else "", estado=(addr.state or "") if addr else "", pais=(addr.country or "USA") if addr else "USA", - tax_id=prog.tax_id if (prog and prog.tax_id) else (getattr(main, 'rfc', "") or ""), - programa="IMMEX" if (prog and prog.program) else "", - autorizacion=prog.program_number if prog else "", - prosec=prog.prosec_authorization if (prog and prog.prosec and prog.prosec_authorization) else "", - reg_emp=prog.val_certified_company_registry if (prog and hasattr(prog, 'val_certified_company_registry')) else ( - prog.certified_company_registry if (prog and prog.certified_company_registry) else "" + tax_id=( + prog.tax_id + if (prog and prog.tax_id) + else (getattr(main, "rfc", "") or "") + ), + programa="IMMEX" if (prog and prog.program) else "", + autorizacion=prog.program_number if prog else "", + prosec=( + prog.prosec_authorization + if (prog and prog.prosec and prog.prosec_authorization) + else "" + ), + reg_emp=( + prog.val_certified_company_registry + if (prog and hasattr(prog, "val_certified_company_registry")) + else ( + prog.certified_company_registry + if (prog and prog.certified_company_registry) + else "" + ) + ), + cert=( + prog.is_certified_company + if (prog and prog.is_certified_company) + else "" ), - cert=prog.is_certified_company if (prog and prog.is_certified_company) else "" ) - def obtener_datos(self, db: Session, invoice_id: int, company_id: int, progress_callback: Optional[Callable] = None, currency_code: str = 'ORIGINAL') -> FacturaImportacionCompleta: + def obtener_datos( + self, + db: Session, + invoice_id: int, + company_id: int, + progress_callback: Optional[Callable] = None, + currency_code: str = "ORIGINAL", + ) -> FacturaImportacionCompleta: try: - if progress_callback: progress_callback(10, "Searching invoice...") - header = db.query(InvoiceHeader).filter(InvoiceHeader.id == invoice_id, InvoiceHeader.company_id == company_id).first() - if not header: raise HTTPException(status_code=404, detail="Invoice not found") + if progress_callback: + progress_callback(10, "Searching invoice...") + header = ( + db.query(InvoiceHeader) + .filter( + InvoiceHeader.id == invoice_id, + InvoiceHeader.company_id == company_id, + ) + .first() + ) + if not header: + raise HTTPException(status_code=404, detail="Invoice not found") - compliance = header.compliance_mx + compliance = header.compliance_mx logistics = header.logistics if header.logistics else None financials = header.financials if header.financials else None - if progress_callback: progress_callback(20, "Fetching entry data...") - pedimento_id = compliance.pedimento_id if (compliance and compliance.pedimento_id) else header.related_doc_id - pedimento = db.query(Pedimentos).filter(Pedimentos.id == pedimento_id).first() if pedimento_id else None - - if progress_callback: progress_callback(30, "Fetching client and supplier...") + if progress_callback: + progress_callback(20, "Fetching entry data...") + pedimento_id = ( + compliance.pedimento_id + if (compliance and compliance.pedimento_id) + else header.related_doc_id + ) + pedimento = ( + db.query(Pedimentos).filter(Pedimentos.id == pedimento_id).first() + if pedimento_id + else None + ) + + if progress_callback: + progress_callback(30, "Fetching client and supplier...") proveedor_id = compliance.provider_id if compliance else None - cliente_proveedor = self._obtener_datos_cliente(db, proveedor_id, "Supplier:") if proveedor_id else ClienteSchema(header="Supplier", nombre="Unassigned", direccion="", tax_id="", codigo_postal="", ciudad="", estado="", pais="") + cliente_proveedor = ( + self._obtener_datos_cliente(db, proveedor_id, "Supplier:") + if proveedor_id + else ClienteSchema( + header="Supplier", + nombre="Unassigned", + direccion="", + tax_id="", + codigo_postal="", + ciudad="", + estado="", + pais="", + ) + ) nombre_agente = "" if compliance and compliance.customs_broker_id: - broker = db.query(CustomsBroker).filter(CustomsBroker.id == compliance.customs_broker_id).first() - if broker: nombre_agente = broker.name + broker = ( + db.query(CustomsBroker) + .filter(CustomsBroker.id == compliance.customs_broker_id) + .first() + ) + if broker: + nombre_agente = broker.name company = db.query(Company).filter(Company.id == header.company_id).first() # Datos Default (Company/Importer) cliente_default = ClienteSchema( header="Importer / Consignee:", - nombre=getattr(company, 'name', "Local Company"), + nombre=getattr(company, "name", "Local Company"), direccion="FISCAL ADDRESS", - num_exterior="", colonia="", codigo_postal="", ciudad="", estado="", pais="MEX", - tax_id=getattr(company, 'rfc', ""), - programa=getattr(company, 'program', "IMMEX"), autorizacion=getattr(company, 'program_number', "") + num_exterior="", + colonia="", + codigo_postal="", + ciudad="", + estado="", + pais="MEX", + tax_id=getattr(company, "rfc", ""), + programa=getattr(company, "program", "IMMEX"), + autorizacion=getattr(company, "program_number", ""), ) # Left Side Logic (Sold To) cliente_vendido = cliente_default if compliance and compliance.sold_to_id: # Force English header for American Invoice - clean_header = "Sold To:" + clean_header = "Sold To:" # raw_header = compliance.sold_to_header or "SOLD_TO" # clean_header = raw_header.replace("_", " ").title() + ":" - cliente_vendido = self._obtener_datos_cliente(db, compliance.sold_to_id, clean_header) - + cliente_vendido = self._obtener_datos_cliente( + db, compliance.sold_to_id, clean_header + ) + # Right Side Logic (Shipped To) cliente_enviado = cliente_default if compliance and compliance.shipped_to_id: @@ -183,26 +282,37 @@ class FacturaImportacionUsaService: clean_header_shipped = "Shipped To:" # raw_header_shipped = compliance.shipped_to_header or "SHIPPED_TO" # clean_header_shipped = raw_header_shipped.replace("_", " ").title() + ":" - - # Fetch client data - cliente_enviado = self._obtener_datos_cliente(db, compliance.shipped_to_id, clean_header_shipped) - remesa_valor = str(compliance.remesa) if (compliance and compliance.remesa) else "" - acuse_valor = str(compliance.edocument) if (compliance and compliance.edocument) else "N/A" + # Fetch client data + cliente_enviado = self._obtener_datos_cliente( + db, compliance.shipped_to_id, clean_header_shipped + ) + + remesa_valor = ( + str(compliance.remesa) if (compliance and compliance.remesa) else "" + ) + acuse_valor = ( + str(compliance.edocument) + if (compliance and compliance.edocument) + else "N/A" + ) patente_val = "" if pedimento and pedimento.license: patente_val = pedimento.license - elif 'broker' in locals() and broker and broker.license: + elif "broker" in locals() and broker and broker.license: patente_val = broker.license - # --- Transport Data Fetching --- - transporte_txt = str(logistics.transport_type) if (logistics and logistics.transport_type) else "" + transporte_txt = ( + str(logistics.transport_type) + if (logistics and logistics.transport_type) + else "" + ) num_transporte_val = (logistics.trailer_num or "") if logistics else "" - + # Init values - placas_val = (logistics.license_plate or "") if logistics else "" # Plates + placas_val = (logistics.license_plate or "") if logistics else "" # Plates placas_remolque_val = "" transportista_val = (logistics.carrier_id or "") if logistics else "" caat_val = "" @@ -212,53 +322,89 @@ class FacturaImportacionUsaService: if logistics: # 1. Transporter (CAAT / SCAC) if logistics.carrier_id: - transporter_obj = db.query(Transporter).filter(Transporter.transporter_key == logistics.carrier_id).first() + transporter_obj = ( + db.query(Transporter) + .filter(Transporter.transporter_key == logistics.carrier_id) + .first() + ) if transporter_obj: caat_val = transporter_obj.caat_code or "" - scac_val = transporter_obj.transport_code or "" # Mapping transport_code to SCAC + scac_val = ( + transporter_obj.transport_code or "" + ) # Mapping transport_code to SCAC transportista_val = transporter_obj.name or logistics.carrier_id # 2. Vehicle (Plates) if logistics.transport_id: - veh_obj = db.query(Vehicle).filter(Vehicle.vehicle_key == logistics.transport_id).first() + veh_obj = ( + db.query(Vehicle) + .filter(Vehicle.vehicle_key == logistics.transport_id) + .first() + ) if veh_obj: - placas_val = veh_obj.plate_number or placas_val - elif logistics.vehicle_num: - veh_obj = db.query(Vehicle).filter(Vehicle.vehicle_key == logistics.vehicle_num).first() - if veh_obj: - placas_val = veh_obj.plate_number or placas_val + placas_val = veh_obj.plate_number or placas_val + elif logistics.vehicle_num: + veh_obj = ( + db.query(Vehicle) + .filter(Vehicle.vehicle_key == logistics.vehicle_num) + .first() + ) + if veh_obj: + placas_val = veh_obj.plate_number or placas_val # 3. Trailer if logistics.trailer_num: - trl_obj = db.query(Trailer).filter(Trailer.trailer_number == logistics.trailer_num).first() + trl_obj = ( + db.query(Trailer) + .filter(Trailer.trailer_number == logistics.trailer_num) + .first() + ) if trl_obj: placas_remolque_val = trl_obj.plate_number or "" # 4. Driver (License) if logistics.carrier_id and logistics.driver_name: - drv_obj = db.query(Driver).filter( - Driver.transporter_key == logistics.carrier_id, - Driver.driver_name == logistics.driver_name - ).first() + drv_obj = ( + db.query(Driver) + .filter( + Driver.transporter_key == logistics.carrier_id, + Driver.driver_name == logistics.driver_name, + ) + .first() + ) if drv_obj: - licencia_cond_val = drv_obj.license_number or "" + licencia_cond_val = drv_obj.license_number or "" # Determine Currency - moneda_final = getattr(header, 'currency', "USD") or "USD" - if currency_code == 'MXN': - moneda_final = 'MXN' - elif currency_code == 'USD': - moneda_final = 'USD' + moneda_final = getattr(header, "currency", "USD") or "USD" + if currency_code == "MXN": + moneda_final = "MXN" + elif currency_code == "USD": + moneda_final = "USD" factura_schema = FacturaSchema( numero=header.invoice_number or "N/A", - titulo_documento=self._get_document_title(header.invoice_type or "", is_american=True), + titulo_documento=self._get_document_title( + header.invoice_type or "", is_american=True + ), fecha=str(header.invoice_date) if header.invoice_date else "", - tipo_cambio=float(financials.exchange_rate) if (financials and financials.exchange_rate) else (float(pedimento.exchange_rate) if pedimento and pedimento.exchange_rate else 1.0), + tipo_cambio=( + float(financials.exchange_rate) + if (financials and financials.exchange_rate) + else ( + float(pedimento.exchange_rate) + if pedimento and pedimento.exchange_rate + else 1.0 + ) + ), moneda=moneda_final, incoterm=(logistics.incoterm or "") if logistics else "", observaciones=header.observation_es or header.observation_en or "", - pedimento=f"{pedimento.year} {pedimento.customs_office[:2] if pedimento.customs_office else ''} {pedimento.license} {pedimento.pedimento_number}" if pedimento else "", + pedimento=( + f"{pedimento.year} {pedimento.customs_office[:2] if pedimento.customs_office else ''} {pedimento.license} {pedimento.pedimento_number}" + if pedimento + else "" + ), clave_pedimento=pedimento.pedimento_code if pedimento else "", regimen=header.document_type or "", patente=patente_val, @@ -271,62 +417,87 @@ class FacturaImportacionUsaService: caat=caat_val, scac=scac_val, licencia_conductor=licencia_cond_val, - aduana=compliance.aduana if (compliance and compliance.aduana) else (pedimento.customs_office[:2] if (pedimento and pedimento.customs_office) else ""), + aduana=( + compliance.aduana + if (compliance and compliance.aduana) + else ( + pedimento.customs_office[:2] + if (pedimento and pedimento.customs_office) + else "" + ) + ), precinto=(logistics.seal_number or "") if logistics else "", destino=(logistics.destination_goods or "") if logistics else "", - remesa=remesa_valor, acuse_electronico=acuse_valor + remesa=remesa_valor, + acuse_electronico=acuse_valor, ) - - if progress_callback: progress_callback(50, "Processing items...") - lines = db.query(LineItem).join(Item, LineItem.item_id == Item.id).filter(Item.invoice_id == header.id).all() + + if progress_callback: + progress_callback(50, "Processing items...") + lines = db.query(LineItem).filter(LineItem.invoice_id == header.id).all() partidas_list = [] - + for line in lines: - qty = db.query(LineQuantity).filter(LineQuantity.item_line_id == line.id).first() - fin = db.query(LineFinancial).filter(LineFinancial.item_line_id == line.id).first() - part_master = db.query(Part).filter(Part.id == line.part_number).first() + qty = ( + db.query(LineQuantity) + .filter(LineQuantity.item_line_id == line.id) + .first() + ) + fin = ( + db.query(LineFinancial) + .filter(LineFinancial.item_line_id == line.id) + .first() + ) + part_master = ( + db.query(Part).filter(Part.id == line.part_number_id).first() + ) desc_final = "N/D" - num_parte_final = str(line.part_number or "N/A") - fraccion_raw = "" + num_parte_final = str(line.part_number_id or "N/A") + fraccion_raw = "" origen_final = "MEX" if part_master: # Prefer English description if available, else Spanish - desc_final = part_master.description_english or part_master.description_spanish or "No Desc." + desc_final = ( + part_master.description_english + or part_master.description_spanish + or "No Desc." + ) num_parte_final = part_master.part_number # Prefer US Fraction (HTS) if available - fraccion_raw = part_master.us_fraction if part_master.us_fraction else "" - + fraccion_raw = ( + part_master.us_fraction if part_master.us_fraction else "" + ) + if part_master.fa_data and part_master.fa_data.origin_country: origen_final = part_master.fa_data.origin_country - # FRACTION LOGIC: Use US Fraction (us_fraction) if available, otherwise blank fraccion_imprimir = "" - + # Check part master US fraction if part_master and part_master.us_fraction: fraccion_imprimir = part_master.us_fraction.strip() - + # Optional: Format if needed, but raw is usually fine for US HTS # If valid US fraction logic requires looking up in DB, we could add that here. # For now, per requirement: "Si no tiene, pues de queda en blanco" - + # Default "General" and "0%" if no specific logic for US duties yet - preferencia_txt = "General" + preferencia_txt = "General" advalorem_txt = "0%" # Prioritize USD for American Invoice logic if available? # Sticking to same logic as Mex for now but could prioritize USD columns. # Actually, duplicate logic from mex service for now to ensure consistency. - + v_unitario = 0.0 v_total = 0.0 - + if fin: - is_mxn = (factura_schema.moneda == 'MXN') - + is_mxn = factura_schema.moneda == "MXN" + if is_mxn: v_unitario = float(fin.unit_cost_commercial_mxn or 0.0) v_total = float(fin.value_commercial_mxn or 0.0) @@ -335,13 +506,13 @@ class FacturaImportacionUsaService: v_total = float(fin.value_commercial_usd or 0.0) if not v_unitario: - v_unitario = float(fin.commercial_unit_cost or 0.0) - + v_unitario = float(fin.commercial_unit_cost or 0.0) + if not v_total: - v_total = float(fin.total_commercial_value or 0.0) + v_total = float(fin.total_commercial_value or 0.0) cantidad = float(qty.quantity) if (qty and qty.quantity) else 0.0 - + if cantidad > 0: if v_unitario > 0 and v_total == 0: v_total = v_unitario * cantidad @@ -349,39 +520,59 @@ class FacturaImportacionUsaService: v_unitario = v_total / cantidad # UOM Mapping for English context - uom_raw = qty.weight_unit if qty else "PCS" - if uom_raw == "PZA": uom_raw = "PCS" + uom_raw = line.unit_of_measure_info.code if line.unit_of_measure_info else "PCS" + if uom_raw == "PZA": + uom_raw = "PCS" - partidas_list.append(PartidaSchema( - numero_parte=num_parte_final, - descripcion=desc_final, - fraccion=fraccion_imprimir, - origen=origen_final, - advalorem=advalorem_txt, - preferencia=preferencia_txt, - cantidad_importacion=self.formatear_numero(qty.quantity if qty else 0), - unidad_medida=uom_raw, - cantidad_bultos=int(qty.package_quantity) if qty and qty.package_quantity else 0, - clave_bultos=(qty.package_key or "") if qty else "", - peso_neto=self.formatear_numero(qty.net_weight if qty else 0), - peso_bruto=self.formatear_numero(qty.gross_weight if qty else 0), - valor_costo_unitario=self.formatear_numero(v_unitario), - valor_total=self.formatear_numero(v_total) - )) + partidas_list.append( + PartidaSchema( + numero_parte=num_parte_final, + descripcion=desc_final, + fraccion=fraccion_imprimir, + origen=origen_final, + advalorem=advalorem_txt, + preferencia=preferencia_txt, + cantidad_importacion=self.formatear_numero( + qty.quantity if qty else 0 + ), + unidad_medida=uom_raw, + cantidad_bultos=( + int(qty.package_quantity) + if qty and qty.package_quantity + else 0 + ), + clave_bultos=( + qty.package_info.key if (qty and qty.package_info) else "" + ), + peso_neto=self.formatear_numero(qty.net_weight if qty else 0), + peso_bruto=self.formatear_numero( + qty.gross_weight if qty else 0 + ), + valor_costo_unitario=self.formatear_numero(v_unitario), + valor_total=self.formatear_numero(v_total), + ) + ) - totales = self.calcular_totales(partidas_list, Decimal(factura_schema.tipo_cambio)) + totales = self.calcular_totales( + partidas_list, Decimal(factura_schema.tipo_cambio) + ) return FacturaImportacionCompleta( - cliente_proveedor=cliente_proveedor, cliente_vendido=cliente_vendido, - cliente_enviado=cliente_enviado, factura=factura_schema, - partidas=partidas_list, totales=totales + cliente_proveedor=cliente_proveedor, + cliente_vendido=cliente_vendido, + cliente_enviado=cliente_enviado, + factura=factura_schema, + partidas=partidas_list, + totales=totales, ) except Exception as e: print(f"Error Service A76 USA: {e}") raise HTTPException(status_code=500, detail=f"Error: {str(e)}") - def calcular_totales(self, partidas: List[PartidaSchema], tipo_cambio: Decimal) -> TotalesSchema: + def calcular_totales( + self, partidas: List[PartidaSchema], tipo_cambio: Decimal + ) -> TotalesSchema: cant = sum(p.cantidad_importacion for p in partidas) valor = sum(p.valor_total for p in partidas) peso_n = sum(p.peso_neto for p in partidas) @@ -389,22 +580,38 @@ class FacturaImportacionUsaService: bultos = sum(p.cantidad_bultos for p in partidas) claves = [p.clave_bultos for p in partidas if p.clave_bultos] clave_comun = max(set(claves), key=claves.count) if claves else "" - # if bultos > 1 and clave_comun and not clave_comun.endswith("S"): clave_comun += "S" + # if bultos > 1 and clave_comun and not clave_comun.endswith("S"): clave_comun += "S" # Don't pluralize strictly in English without logic, kept simple. - + tc = float(tipo_cambio) if tipo_cambio else 1.0 - return TotalesSchema( - cantidad_total=self.formatear_numero(cant), bultos_total=bultos, clave_bultos=clave_comun, - peso_neto_total=self.formatear_numero(peso_n), peso_bruto_total=self.formatear_numero(peso_b), - valor_total_total=self.formatear_numero(valor), valor_total_dolares=self.formatear_numero(valor / tc if tc > 0 else 0) + return TotalesSchema( + cantidad_total=self.formatear_numero(cant), + bultos_total=bultos, + clave_bultos=clave_comun, + peso_neto_total=self.formatear_numero(peso_n), + peso_bruto_total=self.formatear_numero(peso_b), + valor_total_total=self.formatear_numero(valor), + valor_total_dolares=self.formatear_numero(valor / tc if tc > 0 else 0), ) - def generar_factura_completa(self, db: Session, invoice_id: int, company_id: int, formato: str = "pdf", progress_callback: Optional[Callable] = None, currency_code: str = 'ORIGINAL') -> Tuple[bytes, str, str]: - if progress_callback: progress_callback(5, "Starting report service...") - datos = self.obtener_datos(db, invoice_id, company_id, progress_callback, currency_code) - - if progress_callback: progress_callback(80, "Rendering template...") - + def generar_factura_completa( + self, + db: Session, + invoice_id: int, + company_id: int, + formato: str = "pdf", + progress_callback: Optional[Callable] = None, + currency_code: str = "ORIGINAL", + ) -> Tuple[bytes, str, str]: + if progress_callback: + progress_callback(5, "Starting report service...") + datos = self.obtener_datos( + db, invoice_id, company_id, progress_callback, currency_code + ) + + if progress_callback: + progress_callback(80, "Rendering template...") + # LOGO LOGIC logo_b64 = None try: @@ -419,26 +626,48 @@ class FacturaImportacionUsaService: if target_path.exists(): with open(target_path, "rb") as image_file: - encoded_string = base64.b64encode(image_file.read()).decode('utf-8') + encoded_string = base64.b64encode(image_file.read()).decode( + "utf-8" + ) mime = "image/png" - if target_path.suffix.lower() in ['.jpg', '.jpeg']: mime = "image/jpeg" + if target_path.suffix.lower() in [".jpg", ".jpeg"]: + mime = "image/jpeg" logo_b64 = f"data:{mime};base64,{encoded_string}" except Exception as e: print(f"Error loading logo: {e}") context = { - 'cliente_proveedor': datos.cliente_proveedor.model_dump(), 'cliente_vendido': datos.cliente_vendido.model_dump(), - 'cliente_enviado': datos.cliente_enviado.model_dump(), 'factura': datos.factura.model_dump(), - 'partidas': [p.model_dump() for p in datos.partidas], 'totales': datos.totales.model_dump(), - 'logo_b64': logo_b64 + "cliente_proveedor": datos.cliente_proveedor.model_dump(), + "cliente_vendido": datos.cliente_vendido.model_dump(), + "cliente_enviado": datos.cliente_enviado.model_dump(), + "factura": datos.factura.model_dump(), + "partidas": [p.model_dump() for p in datos.partidas], + "totales": datos.totales.model_dump(), + "logo_b64": logo_b64, } html_content = self.template.render(**context) nombre = f"Commercial_Invoice_{datos.factura.numero}.{formato}" - if formato == "html": return html_content.encode('utf-8'), nombre, "text/html" - - if progress_callback: progress_callback(90, "Generating PDF...") - options = {'page-size': 'Letter', 'margin-top': '0.5in', 'margin-right': '0.5in', 'margin-bottom': '0.5in', 'margin-left': '0.5in', 'encoding': "UTF-8", 'enable-local-file-access': None} - pdf = pdfkit.from_string(html_content, False, options=options, configuration=self._get_wkhtmltopdf_config()) - - if progress_callback: progress_callback(100, "Completed") + if formato == "html": + return html_content.encode("utf-8"), nombre, "text/html" + + if progress_callback: + progress_callback(90, "Generating PDF...") + options = { + "page-size": "Letter", + "margin-top": "0.5in", + "margin-right": "0.5in", + "margin-bottom": "0.5in", + "margin-left": "0.5in", + "encoding": "UTF-8", + "enable-local-file-access": None, + } + pdf = pdfkit.from_string( + html_content, + False, + options=options, + configuration=self._get_wkhtmltopdf_config(), + ) + + if progress_callback: + progress_callback(100, "Completed") return pdf, nombre, "application/pdf" diff --git a/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py b/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py index 90f873e9..7238e369 100644 --- a/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py +++ b/backend/api/v1/modules/a76/reports/importacion/packing_list/service.py @@ -13,7 +13,6 @@ from sqlalchemy.orm import Session # --- MODELOS --- from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceLogistics from api.v1.modules.a76.items.line_quantities.models import LineQuantity -from api.v1.modules.a76.items.line_items.models import LineItem from api.v1.modules.a76.items.line_customs.models import LineCustom from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientProviderAddress, ClientProviderPrograms @@ -22,7 +21,7 @@ from api.v1.modules.a76.parts.models import Part from api.v1.modules.a76.pedmientos.models import Pedimentos from api.v1.modules.a76.general_catalogs.company.models import Company from api.v1.modules.a76.customs_brokers.models import CustomsBroker -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem # --- TRANSPORTATION MODELS --- from api.v1.modules.a76.transportation.transporters.models import Transporter @@ -67,10 +66,18 @@ class PackingListService: return pdfkit.configuration(wkhtmltopdf=path) def formatear_numero(self, valor, decimales: int = 2): - if valor is None: return 0.0 + """ + Formatea un número con separadores de miles y decimales especificados. + Retorna una cadena formateada para mostrar en reportes. + """ + if valor is None: + valor = 0.0 try: - return round(float(valor), decimales) - except: return 0.0 + num = round(float(valor), decimales) + # Formatear con separadores de miles y decimales + return f"{num:,.{decimales}f}" + except: + return f"0.{'0' * decimales}" def _format_fraccion_fallback(self, fraccion_raw: str) -> str: if not fraccion_raw or len(fraccion_raw) < 8: @@ -238,40 +245,40 @@ class PackingListService: ) if progress_callback: progress_callback(50, "Procesando partidas...") - lines = db.query(LineItem).join(Item, LineItem.item_id == Item.id).filter(Item.invoice_id == header.id).all() + lines = db.query(LineItem).filter(LineItem.invoice_id == header.id).all() partidas_list = [] for line in lines: - qty = db.query(LineQuantity).filter(LineQuantity.item_line_id == line.id).first() + weight_type = db.query(InvoiceLogistics.weight_type).filter(InvoiceLogistics.invoice_id == line.invoice_id).scalar() + qty = db.query(LineQuantity).filter(LineQuantity.item_line_id == line.id).first() # --- WEIGHT CALCULATION LOGIC --- peso_neto_kg = 0.0 peso_bruto_kg = 0.0 peso_neto_lb = 0.0 - peso_bruto_lb = 0.0 + peso_bruto_lb = 0.0 - if qty: - raw_net = float(qty.net_weight or 0) - raw_gross = float(qty.gross_weight or 0) - unit = (qty.weight_unit or "KG").upper() - - if unit == "LB" or unit == "LBS": - peso_neto_lb = raw_net - peso_bruto_lb = raw_gross - peso_neto_kg = raw_net / 2.20462 - peso_bruto_kg = raw_gross / 2.20462 - else: # Default KG - peso_neto_kg = raw_net - peso_bruto_kg = raw_gross - peso_neto_lb = raw_net * 2.20462 - peso_bruto_lb = raw_gross * 2.20462 + raw_net = float(qty.net_weight or 0) + raw_gross = float(qty.gross_weight or 0) + unit = (weight_type or "KGS").upper() + + if unit == "LBS": + peso_neto_lb = raw_net + peso_bruto_lb = raw_gross + peso_neto_kg = raw_net / 2.20462 + peso_bruto_kg = raw_gross / 2.20462 + else: # Default KG + peso_neto_kg = raw_net + peso_bruto_kg = raw_gross + peso_neto_lb = raw_net * 2.20462 + peso_bruto_lb = raw_gross * 2.20462 # -------------------------------- custom_obj = db.query(LineCustom).filter(LineCustom.item_line_id == line.id).first() - part_master = db.query(Part).filter(Part.id == line.part_number).first() + part_master = db.query(Part).filter(Part.id == line.part_number_id).first() desc_final = "S/D" - num_parte_final = str(line.part_number or "S/N") + num_parte_final = str(line.part_number_id or "S/N") fraccion_raw = "" origen_final = "MEX" uom_comercial = "PZA" # Default UOM diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/processors.py b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/processors.py new file mode 100644 index 00000000..d807f091 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/processors.py @@ -0,0 +1,369 @@ +from typing import List, Dict, Any, Tuple +from sqlalchemy.orm import Session, joinedload +from datetime import datetime + +from .schemas import Mainx30GenerationRequest, ErrorValidacion + +# --- MODELOS A76 --- +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceComplianceMx +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.clients_and_providers.models import ClientProvider + +class ScaiiProcessor: + def __init__(self): + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total_factura = 0.0 + self.flete_total = 0.0 + self.peso_bruto_factura = 0.0 + self.peso_neto_factura = 0.0 + self.errores: List[ErrorValidacion] = [] + + def _obtener_datos_cliente(self, cliente: ClientProvider) -> dict: + """Extrae de manera segura los datos del cliente/dirección""" + address = cliente.address + pais_raw = (address.country or "MX").upper() if address else "MX" + + pais = "MX" + if pais_raw in ["MEXICO", "MEX", "MX"]: + pais = "MX" + elif pais_raw in ["USA", "US", "UNITED STATES"]: + pais = "US" + else: + pais = pais_raw[:2] + + tax_id = cliente.rfc or "" + + data = { + "nombre": (cliente.name or "")[:39], + "tax_id": tax_id[:15], + "broker": "", "calle": "", "cp": "", "ciudad": "", "estado": "", "pais": pais, "tel": "", + "manufacturer_id": "", "tipo_ext_nac": "E" + } + + # TipoExtNac logic from Clarion: N (National/ManufacturerID) or E (External/TaxID) + # We'll use TaxID as default for definitive if not specified + data["manufacturer_id"] = (cliente.programs.manufacturer_id or "")[:15] if cliente.programs else "" + + if cliente.programs: + data["broker"] = (cliente.programs.broker or "")[:6] + + if address: + calle_base = address.streets or "" + num_base = address.exterior_number or "" + # Prevent 'None' string + calle_comp = f"{calle_base} {num_base}".strip() + + # Clarion expects 20 chars for city_state: 5 CP + 11 City + 4 State + cp_formatted = (address.postal_code or "")[:5] + city_formatted = (address.city or "")[:11] + state_formatted = (address.state or "")[:4] + data["city_state"] = f"{cp_formatted:<5}{city_formatted:<11}{state_formatted:<4}" + data["calle"] = calle_comp[:35] + data["cp"] = (address.postal_code or "")[:9] + data["ciudad"] = (address.city or "").strip()[:20] + data["estado"] = (address.state or "").strip()[:2].upper() + data["tel"] = (address.phone or "")[:15] + + return data + + def _agregar_error(self, partida, id_err, desc, sol, tipo): + self.errores.append(ErrorValidacion(partida=partida, linea=0, descripcion=f"[ {id_err} ] {desc}", soluciones=sol, identificador=tipo)) + +class ScafDefProcessor(ScaiiProcessor): + """Procesador para Importación Definitiva basado en lógica Clarion (SComprasMexID)""" + def __init__(self): + super().__init__() + + def procesar_facturas( + self, db: Session, facturas_nums: List[str], empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + lineas = [] + self.errores = [] + + # 1. Traer Facturas por número + facturas = db.query(InvoiceHeader).join( + InvoiceComplianceMx, InvoiceHeader.id == InvoiceComplianceMx.invoice_id + ).options( + joinedload(InvoiceHeader.financials), + joinedload(InvoiceHeader.compliance_mx), + joinedload(InvoiceHeader.logistics) + ).filter( + InvoiceHeader.invoice_number.in_(facturas_nums) + ).all() + + entry_port = request.entry_port or "" + exit_port = request.exit_port or "" + fecha_trans = datetime.now().strftime("%y%m%d") + + entry_port_desc = empresa_dict.get('entry_port_desc', 'PUERTO ENTRADA')[:15] + exit_port_desc = empresa_dict.get('exit_port_desc', 'PUERTO SALIDA')[:15] + main_activity = empresa_dict.get('main_activity', 'RAW MATERIAL')[:30] + city_state = empresa_dict.get('city_state', '')[:30] + + for factura in facturas: + self.cuenta_facturas += 1 + f_val_total = 0.0 + f_pb = 0.0 + f_pn = 0.0 + f_consec_partidas = 0 + + # MF01: Header + mod_trans = factura.logistics.transport_mode if factura.logistics else "30" + f_fecha = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else fecha_trans + + lineas.append( + f"MF01{empresa_dict['broker'][:6]:<6}" + f"{exit_port[:5]:<5}" + f"{entry_port[:5]:<5}" + f"{fecha_trans}" + f" {mod_trans[:2]:<2}" + f"{f_fecha}" + f"{factura.invoice_number[:15]:<15}" + ) + self.cuenta_partidas += 1 + + # MF03 + conductor = (factura.logistics.driver_name or "")[:23] if factura.logistics else "" + carrier = (factura.logistics.carrier_id or "")[:10] + + lineas.append( + f"MF03{carrier:<10}{conductor:<23}{entry_port_desc:<15}{exit_port_desc:<15}" + ) + self.cuenta_partidas += 1 + + # MF20 + num_transporte = (factura.logistics.transport_num or "")[:15] if factura.logistics else "" + + # Use dynamic city/state from entry_port description if available, otherwise blank + # Clarion format: 5 digit Zip (if relevant) + City State + # We will use the entry_port_desc (e.g. CD. JUAREZ CHIH) and assume a dummy zip '00000' if not parsed + # Or better, just use the entry_port_desc fully aligned + + # Using entry_port_desc directly instead of hardcoded default + cruce_desc = entry_port_desc[:20] if entry_port_desc else " " + + lineas.append( + f"MF20{factura.invoice_number[:15]:<15}I{num_transporte:<15}00000{cruce_desc:<20}" + f"{exit_port[:5]:<5}{entry_port_desc:<15} " + ) + self.cuenta_partidas += 1 + + # MF22 + lineas.append(f"MF22{main_activity:<60}") + self.cuenta_partidas += 1 + + # IV01 + flete = int(round(float(factura.financials.freight or 0))) if factura.financials else 0 + self.flete_total += float(factura.financials.freight or 0) if factura.financials else 0.0 + + s_tax = ""; c_tax = "" + if factura.compliance_mx: + if factura.compliance_mx.sold_to_id: + c_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_obj: c_tax = (c_obj.rfc or "")[:12] + if factura.compliance_mx.provider_id: + s_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_obj: s_tax = (s_obj.rfc or "")[:12] + + # IV01 uses 11 spaces then 'C' per Clarion logic + # Adjusted validation for RFCs to avoid crashes or None + s_tax_safe = s_tax if s_tax else " " + c_tax_safe = c_tax if c_tax else " " + + lineas.append( + f"IV01{factura.invoice_number[:15]:<15}{f_fecha}78{' ':<12}C" + f"{empresa_dict['broker'][:6]:<6}{flete:08d}{s_tax_safe:<13}{c_tax_safe:<13}" + ) + self.cuenta_partidas += 1 + + # IV02: Vendor/Manufacturer Info + # Clarion: CliVen:ManufacterID, CliVen:Nombre + manufacturer_id = "" + vendor_name = "" + if factura.compliance_mx and factura.compliance_mx.provider_id: + vendor = db.query(ClientProvider).options( + joinedload(ClientProvider.programs) + ).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if vendor: + manufacturer_id = (vendor.programs.manufacturer_id or "")[:16] if vendor.programs else "" + vendor_name = (vendor.name or "")[:39] + + lineas.append(f"IV02{manufacturer_id:<16}{vendor_name:<39}") + self.cuenta_partidas += 1 + + # IV10: Responsible + lineas.append(f"IV10 {main_activity[:30]:<30}{empresa_dict['responsable'][:30]:<30}") + self.cuenta_partidas += 1 + + # IV11: Obs + lineas.append(f"IV11H") + self.cuenta_partidas += 1 + + obs_line = f"IV11F{(factura.notes or '')[:70]:<70}" if request.iv11 else "IV11F" + lineas.append(obs_line) + self.cuenta_partidas += 1 + + # Participants IV12-14 (S, C, T, I) + # Shipper (S) + if factura.compliance_mx and factura.compliance_mx.provider_id: + s_cliente = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_cliente: + s_data = self._obtener_datos_cliente(s_cliente) + broker_impo = s_data['broker'] or empresa_dict['broker'] + lineas.append(f"IV12S{broker_impo[:6]:<6}{s_data['nombre'][:39]:<39}") + # Ensure spacing aligns with Clarion example (30 spaces + 35 address + space + CP) + lineas.append(f"IV13S{'':<30}{s_data['calle']:<35} {s_data['cp']:<9}") + # IV14: City(20)+State(2)+Country(2)+Phone(30?? No, Clarion example shows Phone then TaxID) + # Clarion example: IV14S... CITY... STMX... TAXID... TEL... + # Re-aligning based on provided example: + # IV14SAKRON NEUS 16-0919851 00000 + # City (20) State (2) Country (2) Space(30) TaxID(15) Tel(5?) + + lineas.append(f"IV14S{s_data['ciudad']:<20}{s_data['estado']:<2}{s_data['pais']:<2}{'':<30}{s_data['tax_id']:<15}{s_data['tel'][:5]:<5}") + self.cuenta_partidas += 3 + + # Consignee (C), Ship To (T), and Importer (I) + if factura.compliance_mx and factura.compliance_mx.sold_to_id: + c_cliente = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_cliente: + c_data = self._obtener_datos_cliente(c_cliente) + broker_impo = c_data['broker'] or empresa_dict['broker'] + + # Consignee (C) + lineas.append(f"IV12C{broker_impo[:6]:<6}{c_data['nombre'][:39]:<39}") + lineas.append(f"IV13C{'':<30}{c_data['calle']:<35} {c_data['cp']:<9}") + lineas.append(f"IV14C{c_data['ciudad']:<20}{c_data['estado']:<2}{c_data['pais']:<2}{'':<30}{c_data['tax_id']:<15}{c_data['tel'][:5]:<5}") + self.cuenta_partidas += 3 + + # Ship To (T) - check if different + t_id = factura.compliance_mx.shipped_to_id + if t_id and t_id != factura.compliance_mx.sold_to_id: + t_cl = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter(ClientProvider.id == t_id).first() + if t_cl: + t_data = self._obtener_datos_cliente(t_cl) + b_t = t_data['broker'] or empresa_dict['broker'] + lineas.append(f"IV12T{b_t[:6]:<6}{t_data['nombre'][:39]:<39}") + lineas.append(f"IV13T{'':<30}{t_data['calle']:<35} {t_data['cp']:<9}") + lineas.append(f"IV14T{t_data['ciudad']:<20}{t_data['estado']:<2}{t_data['pais']:<2}{'':<30}{t_data['tax_id']:<15}{t_data['tel'][:5]:<5}") + self.cuenta_partidas += 3 + + # Importer (I) - Usually same as Consignee in Definitive unless ShippedBy is set + i_id = factura.compliance_mx.shipped_by_id + if i_id and i_id != factura.compliance_mx.sold_to_id and i_id != t_id: + i_cl = db.query(ClientProvider).options( + joinedload(ClientProvider.address), + joinedload(ClientProvider.programs) + ).filter(ClientProvider.id == i_id).first() + if i_cl: + i_data = self._obtener_datos_cliente(i_cl) + b_i = i_data['broker'] or empresa_dict['broker'] + lineas.append(f"IV12I{b_i[:6]:<6}{i_data['nombre'][:39]:<39}") + lineas.append(f"IV13I{'':<30}{i_data['calle']:<35} {i_data['cp']:<9}") + lineas.append(f"IV14I{i_data['ciudad']:<20}{i_data['estado']:<2}{i_data['pais']:<2}{'':<30}{i_data['tax_id']:<15}{i_data['tel'][:5]:<5}") + self.cuenta_partidas += 3 + else: + # Fallback: repeat C as I if not specified (following Clarion pattern) + lineas.append(f"IV12I{broker_impo[:6]:<6}{c_data['nombre'][:39]:<39}") + lineas.append(f"IV13I{'':<30}{c_data['calle']:<35} {c_data['cp']:<9}") + lineas.append(f"IV14I{c_data['ciudad']:<20}{c_data['estado']:<2}{c_data['pais']:<2}{'':<30}{c_data['tax_id']:<15}{c_data['tel'][:5]:<5}") + self.cuenta_partidas += 3 + + # Items IV20-27 + items_headers = db.query(LineItem).filter(LineItem.invoice_id == factura.id).all() + item_ids = [ih.id for ih in items_headers] + + if item_ids: + items_query = db.query(LineItem).filter( + LineItem.id.in_(item_ids) + ).options( + joinedload(LineItem.part_info), + joinedload(LineItem.description), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), + joinedload(LineItem.customs), + joinedload(LineItem.unit_of_measure_info) + ).all() + + for line in items_query: + f_consec_partidas += 1 + part_num = (line.part_info.part_number if line.part_info else "S/N")[:25] + po = (line.order or "")[:20] if line.financial else "" + + # IV20 + lineas.append(f"IV20{f_consec_partidas:03d} {part_num:<25}C {po:<20}") + self.cuenta_partidas += 1 + + # IV21 + desc_ingles = (line.description.description_english or "")[:50] if line.description else "" + lineas.append(f"IV21 {desc_ingles:<50}") + self.cuenta_partidas += 1 + + # Data for IV22 + val_me = float(line.financial.value_usd or 0) if line.financial else 0.0 + qty = float(line.quantity.quantity or 0) if line.quantity else 0.0 + pb = float(line.quantity.gross_weight or 0) if line.quantity else 0.0 + pn = float(line.quantity.net_weight or 0) if line.quantity else 0.0 + costo_u = float(line.financial.unit_cost_capture or 0) if line.financial else 0.0 + + um = (line.unit_of_measure_info.american_code or "PCS")[:3] if line.unit_of_measure_info else "PCS" + pais = ((line.customs.origin_country or "MX")[:2]).upper() if line.customs else "MX" + hts = (line.customs.american_fraction or "").replace(".", "")[:10] if line.customs else "" + + # Formato Clarion @n...v... + val_int = int(round(val_me * 100)) # @n010v2 + qty_int = int(round(qty * 100)) # @n09v2 + pb_int = int(round(pb * 100)) # @n09v2 + pn_int = int(round(pn * 100)) # @n09v2 + costo_int = int(round(costo_u * 100000)) # @n011v5 + + prog_ind = "S" if line.customs and line.customs.has_origin_certificate else "N" + + # IV22 + lineas.append( + f"IV22{hts:<10}{prog_ind}" + f"{val_int:010d}{um:<3}{qty_int:09d}{pais:<2}0000010000000000100000 " + f"{pb_int:09d}{pn_int:09d}" + ) + self.cuenta_partidas += 1 + + # IV24, IV26 (Zeros per logic) + lineas.append(f"IV24 0000000000 000000000 0000000000000000000000") + lineas.append(f"IV26 0000000000 000000000 0000000000000000000000") + self.cuenta_partidas += 2 + + # IV27 + lineas.append(f"IV27{hts:<10}{costo_int:011d}0000000000000000000000000000000000000 ") + self.cuenta_partidas += 1 + + # IV42 (Optional) + if request.iv42: + um4 = um[:4] + lineas.append(f"IV42 0{qty_int:09d}{um4:<4}0000000000 0000000000 0000000000 0000000000 ") + self.cuenta_partidas += 1 + + f_val_total += val_me + f_pb += pb + f_pn += pn + + # IV90: Footer per Invoice + fv_int = int(round(f_val_total * 100)) + fpb_int = int(round(f_pb * 100)) + fpn_int = int(round(f_pn * 100)) + lineas.append(f"IV90{f_consec_partidas:05d}{fv_int:012d}{fpb_int:010d}{fpn_int:010d}") + self.cuenta_partidas += 1 + + self.valor_total_factura += f_val_total + self.peso_bruto_factura += f_pb + self.peso_neto_factura += f_pn + + return lineas, self.errores diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/routes.py b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/routes.py new file mode 100644 index 00000000..833ab452 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/routes.py @@ -0,0 +1,41 @@ +from typing import Dict, Any +from fastapi import APIRouter, Depends, Body +from celery.result import AsyncResult +from core.celery_app import celery_app +from core.security import get_current_user +from .task import generar_transmission_definitiva_async +from .schemas import Mainx30GenerationRequest + +router = APIRouter() + +@router.get("/tasks/{task_id}") +async def get_task_status( + task_id: str, + current_user: Dict[str, Any] = Depends(get_current_user) +): + task_result = AsyncResult(task_id, app=celery_app) + + response = { + "task_id": task_id, + "state": task_result.state, + "result": None, + "info": None + } + + if task_result.state == 'FAILURE': + response["result"] = str(task_result.result) + elif task_result.state == 'SUCCESS': + response["result"] = task_result.result + elif task_result.state == 'PROCESSING': + response["info"] = task_result.info + + return response + +@router.post("/generate") +async def trigger_generation( + request: Mainx30GenerationRequest, + current_user: Dict[str, Any] = Depends(get_current_user) +): + tenant_id = current_user.get("tenant_id") + task = generar_transmission_definitiva_async.delay(request.model_dump(), tenant_id) + return {"task_id": task.id, "message": "Generación Definitiva iniciada"} diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/schemas.py b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/schemas.py new file mode 100644 index 00000000..29448fbb --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/schemas.py @@ -0,0 +1,72 @@ +from typing import List, Optional, Any +from pydantic import BaseModel, Field + +class Mainx30GenerationRequest(BaseModel): + """ + Schema for the Mainx30 file generation request for Definitive Import + """ + manifiestos: Optional[List[str]] = Field(None, description="Lista de números de manifiesto a procesar") + facturas: Optional[List[str]] = Field(None, description="Lista de números de factura a procesar") + entry_port: Optional[str] = Field(None, description="Puerto de entrada") + exit_port: Optional[str] = Field(None, description="Puerto de salida") + regimen: Optional[str] = Field("Definitiva", description="Regimen de importación (Temporal/Definitiva)") + nomenclatura_factura: bool = Field(False, description="Usar nomenclatura basada en factura") + consolidar_rbs: bool = Field(False, description="Consolidar por fracción RB System") + emanifest_fast_blanco: bool = Field(False, description="E-Manifest y FAST en blanco") + no_enviar_emanifest: bool = Field(False, description="No enviar E-Manifest") + consolidar_partidas: bool = Field(False, description="Consolidar partidas (XML OPTIMA Y RBS2)") + main_x40_emanifest: bool = Field(False, description="Main X40 E-Manifest") + main_x30_fedex: bool = Field(False, description="Main X30 (FEDEX)") + iv11: bool = Field(False, description="IV11") + iv42: bool = Field(False, description="IV42") + +class ErrorValidacion(BaseModel): + """ + Schema for validation errors during file generation + """ + partida: int + linea: int + descripcion: str + soluciones: str + identificador: str + campos: str = "" + campos2: str = "" + +class Mainx30Response(BaseModel): + """ + Schema for the generation response + """ + success: bool + message: str + task_id: Optional[str] = None + archivo_generado: Optional[str] = None + ruta_archivo: Optional[str] = None + content: Optional[str] = None + + # Statistics + cuenta_partidas: int = 0 + valor_total: float = 0.0 + flete_total: float = 0.0 + peso_bruto_total: float = 0.0 + peso_neto_total: float = 0.0 + cuenta_facturas: int = 0 + + # Validation + errores: List[ErrorValidacion] = [] + tiene_inconsistencias: bool = False + +class EmpresaDatos(BaseModel): + broker: str + responsable: str + rfc: str + tiene_linea_express: str + nombre_empresa: str = "" + manufacturer_id: str = "" + ftp_key: str = "00SCSI" + main_activity: str = "RAW MATERIAL" + city_state: str = "" + +class ConfiguracionSistema(BaseModel): + path_arch_transmision: str + utilizar_nombre_generico_mainx30: bool + utilizar_codigo_broker_cliente: bool diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/service.py b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/service.py new file mode 100644 index 00000000..634058ee --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/service.py @@ -0,0 +1,175 @@ +import os +import tempfile +from datetime import date, datetime +from typing import List, Tuple, Optional, Dict, Any +from pathlib import Path + +from sqlalchemy.orm import Session, joinedload +from fastapi import HTTPException + +from .schemas import ( + Mainx30GenerationRequest, Mainx30Response, ErrorValidacion, + EmpresaDatos, ConfiguracionSistema +) + +# --- MODELOS A76 --- +from api.v1.modules.a76.general_catalogs.company.models import Company as GEmpresa +from api.v1.modules.a76.general_catalogs.ports.models import Port + +# --- PROCESADORES --- +from .processors import ScafDefProcessor + +class Mainx30DefinitiveService: + def __init__(self): + self.errores_validacion: List[ErrorValidacion] = [] + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + + def generar_mainx30( + self, + db: Session, + request: Mainx30GenerationRequest, + task_instance=None + ) -> Mainx30Response: + try: + self._inicializar_variables() + + # 1. Obtener Datos de Empresa + datos_empresa = self._obtener_datos_company(db) + emp_dict = datos_empresa.model_dump() + + # 2. Obtener Descripciones de Puertos + if request.entry_port: + p_ent = db.query(Port).filter(Port.port_code == request.entry_port).first() + if p_ent: emp_dict['entry_port_desc'] = p_ent.description or p_ent.location_description or "" + + if request.exit_port: + p_sal = db.query(Port).filter(Port.port_code == request.exit_port).first() + if p_sal: emp_dict['exit_port_desc'] = p_sal.description or p_sal.location_description or "" + + # 3. Fecha de Transmisión (YYMMDD) + fecha_transmision = datetime.now().strftime("%y%m%d") + + # 4. Determinar Procesador (Always ScafDefProcessor for this service) + processor = ScafDefProcessor() + # Both 'Definitiva' and 'DEFINITIVO SCAF' use the same heavy processor + + # 5. Procesar Facturas + if not request.facturas: + raise HTTPException(status_code=400, detail="No se proporcionaron facturas para procesar.") + + l_facturas, e_facturas = processor.procesar_facturas(db, request.facturas, emp_dict, request) + + self.errores_validacion.extend(e_facturas) + + # 6. Construir Líneas del Archivo + lineas = [] + + # Línea A + broker = (datos_empresa.broker or "")[:6] + # Clarion uses Broker twice in 'A' record for Definitive + ftp_key = (datos_empresa.ftp_key or "00SCSI")[:6] + lineas.append(f"A {fecha_transmision}03{broker:<6}{broker:<10}{ftp_key:<6}") + self.cuenta_partidas += 1 + + # Agregar Líneas de Facturas + lineas.extend(l_facturas) + self.cuenta_partidas += processor.cuenta_partidas + self.cuenta_facturas = processor.cuenta_facturas + self.valor_total = processor.valor_total_factura + self.peso_bruto_total = processor.peso_bruto_factura + self.peso_neto_total = processor.peso_neto_factura + self.flete_total = processor.flete_total + + # MF80 (Totales Globales) + val_int = int(round(self.valor_total * 100)) + pb_int = int(round(self.peso_bruto_total * 10000)) + pn_int = int(round(self.peso_neto_total * 10000)) + flete_int = int(round(self.flete_total * 100)) + + lineas.append( + f"MF80{val_int:012d}" + f"{self.cuenta_facturas:04d}" + f"{pb_int:012d}" + f"{flete_int:08d}" + f"{pn_int:012d}" + ) + self.cuenta_partidas += 1 + + # Línea Z (Total de líneas) + lineas.append(f"Z {self.cuenta_partidas:05d}") + self.cuenta_partidas += 1 + + # 7. Generar Nombre y Guardar + nombre_archivo = f"{request.facturas[0][:15]}_Mainx30.dat" + if len(request.facturas) > 1: + nombre_archivo = f"MULTIPLE_Mainx30.dat" + + if request.nomenclatura_factura and len(request.facturas) == 1: + nombre_archivo = f"{request.facturas[0][:15]}_Mainx30.dat" + + content = '\r\n'.join(lineas) + + return Mainx30Response( + success=len(self.errores_validacion) == 0, + message="Archivo generado" if len(self.errores_validacion) == 0 else "Archivo generado con errores de validación", + archivo_generado=nombre_archivo, + ruta_archivo="", + content=content, + errores_validacion=self.errores_validacion, + cuenta_partidas=self.cuenta_partidas, + valor_total=self.valor_total, + flete_total=self.flete_total, + peso_bruto_total=self.peso_bruto_total, + peso_neto_total=self.peso_neto_total, + cuenta_facturas=self.cuenta_facturas, + tiene_inconsistencias=len(self.errores_validacion) > 0 + ) + + except HTTPException: + raise + except Exception as e: + import traceback + traceback.print_exc() + raise HTTPException(status_code=500, detail=f"Error generando Mainx30 Definitivo: {str(e)}") + + def _inicializar_variables(self): + self.errores_validacion = [] + self.cuenta_partidas = 0 + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + self.cuenta_facturas = 0 + + def _obtener_datos_company(self, db: Session) -> EmpresaDatos: + empresa = db.query(GEmpresa).options(joinedload(GEmpresa.addresses)).first() + if not empresa: + return EmpresaDatos(broker="", responsable="", rfc="", tiene_linea_express="N", nombre_empresa="", manufacturer_id="", ftp_key="", main_activity="", city_state="") + + city_state = "" + main_addr = next((a for a in (empresa.addresses or []) if a.address_type == 'main'), None) + if not main_addr and empresa.addresses: + main_addr = empresa.addresses[0] + + if main_addr: + cp = (main_addr.postal_code or "")[:5] + city = (main_addr.city or "")[:11] + state = (main_addr.state or "")[:4] + city_state = f"{cp:<5}{city:<11}{state:<4}" + + return EmpresaDatos( + broker=(empresa.broker_company or "")[:5], + responsable=(empresa.responsible or "")[:30], + rfc=(empresa.rfc or "")[:13], + tiene_linea_express=empresa.has_express_line or "N", + nombre_empresa=(empresa.name or "")[:40], + manufacturer_id=(empresa.manufacturer_id or "")[:10], + ftp_key=(empresa.ftp_key or "")[:10], + main_activity=(empresa.main_activity or "")[:30], + city_state=city_state[:30] + ) diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/task.py b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/task.py new file mode 100644 index 00000000..9ec7a08c --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/definitive/MAINX30/task.py @@ -0,0 +1,45 @@ +from core.celery_app import celery_app +from core.database import get_core_db as get_db +from .service import Mainx30DefinitiveService +from .schemas import Mainx30GenerationRequest + +@celery_app.task(name="generar_transmission_definitiva_async", bind=True) +def generar_transmission_definitiva_async(self, request_data: dict, tenant_id: int): + """ + Celery task to generate Mainx30 file for Definitive Import + """ + try: + # Re-create db session for task + db = next(get_db()) + + # Deserialize request + request = Mainx30GenerationRequest(**request_data) + + service = Mainx30DefinitiveService() + response = service.generar_mainx30(db, request, task_instance=self) + + # Return result as dict for Celery serialization + result = response.model_dump() + + # Add base64 encoding for content to match frontend expectations + if response.content: + import base64 + encoded_content = base64.b64encode(response.content.encode('utf-8')).decode('utf-8') + result['content'] = encoded_content + result['file_name'] = response.archivo_generado + result['media_type'] = "text/plain" + + return result + + except Exception as e: + import traceback + traceback_print = traceback.format_exc() + self.update_state( + state='FAILURE', + meta={ + 'exc_type': type(e).__name__, + 'exc_message': str(e), + 'traceback': traceback_print + } + ) + raise e diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/processors.py b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/processors.py new file mode 100644 index 00000000..ce0fb934 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/processors.py @@ -0,0 +1,427 @@ +from typing import List, Dict, Any, Tuple +from sqlalchemy.orm import Session, joinedload +from datetime import datetime + +from .schemas import Mainx30GenerationRequest, ErrorValidacion + +# --- MODELOS A76 --- +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceComplianceMx +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.clients_and_providers.models import ClientProvider + +class ScaiiProcessor: + def __init__(self): + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total_factura = 0.0 + self.flete_total = 0.0 + self.peso_bruto_factura = 0.0 + self.peso_neto_factura = 0.0 + self.errores: List[ErrorValidacion] = [] + + def _obtener_datos_cliente(self, cliente: ClientProvider) -> dict: + """Extrae de manera segura los datos del cliente/dirección""" + address = cliente.address + pais_raw = (address.country or "MX").upper() if address else "MX" + + pais = "MX" + if pais_raw in ["MEXICO", "MEX", "MX"]: + pais = "MX" + elif pais_raw in ["USA", "US", "UNITED STATES"]: + pais = "US" + else: + pais = pais_raw[:2] + + tax_id = cliente.rfc or "" + + data = { + "nombre": (cliente.name or "")[:39], + "tax_id": tax_id[:15], + "broker": "", "calle": "", "cp": "", "ciudad": "", "estado": "", "pais": pais, "tel": "" + } + + if cliente.programs: + data["broker"] = (cliente.programs.broker or "")[:6] + + if address: + calle_comp = f"{address.streets or ''} {address.exterior_number or ''}".strip() + # Clarion expects 20 chars for city_state: 5 CP + 11 City + 4 State + cp_formatted = (address.postal_code or "")[:5] + city_formatted = (address.city or "")[:11] + state_formatted = (address.state or "")[:4] + data["city_state"] = f"{cp_formatted:<5}{city_formatted:<11}{state_formatted:<4}" + data["calle"] = calle_comp[:35] + data["cp"] = (address.postal_code or "")[:9] + data["ciudad"] = (address.city or "")[:20] + data["estado"] = (address.state or "")[:2].upper() + data["tel"] = (address.phone or "")[:15] + + return data + + def procesar_facturas( + self, db: Session, manifiesto: str, empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + # This base method is used for Manifest-based processing (Exportacion/Legacy) + lineas = [] + self.errores = [] + return lineas, self.errores + + def _agregar_error(self, partida, id_err, desc, sol, tipo): + self.errores.append(ErrorValidacion(partida=partida, linea=0, descripcion=f"[ {id_err} ] {desc}", soluciones=sol, identificador=tipo)) + +# --- PROCESADORES ESPECIFICOS --- +class ScafDefProcessor(ScaiiProcessor): + """Procesador para Importación Definitiva""" + def __init__(self): + super().__init__() + + def procesar_facturas( + self, db: Session, facturas_nums: List[str], empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + # Placeholder for Definitiva logic + lineas = [] + self.errores = [] + return lineas, self.errores + +class ScafTempProcessor(ScaiiProcessor): + """Procesador para Importación Temporal basado en lógica Clarion""" + def __init__(self): + super().__init__() + + def procesar_facturas( + self, db: Session, facturas_nums: List[str], empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + lineas = [] + self.errores = [] + + # 1. Traer Facturas por número (Importación Temporal trabaja por factura) + facturas = db.query(InvoiceHeader).join( + InvoiceComplianceMx, InvoiceHeader.id == InvoiceComplianceMx.invoice_id + ).options( + joinedload(InvoiceHeader.financials), + joinedload(InvoiceHeader.compliance_mx), + joinedload(InvoiceHeader.logistics) + ).filter( + InvoiceHeader.invoice_number.in_(facturas_nums) + ).all() + + # Helper for ports from request + entry_port = request.entry_port or "" + exit_port = request.exit_port or "" + + # Date for transmission records (YYMMDD) + fecha_trans = datetime.now().strftime("%y%m%d") + + # Port descriptions from empresa_dict (populated in service.py) + entry_port_desc = empresa_dict.get('entry_port_desc', 'PUERTO ENTRADA')[:15] + exit_port_desc = empresa_dict.get('exit_port_desc', 'PUERTO SALIDA')[:15] + main_activity = empresa_dict.get('main_activity', 'RAW MATERIAL')[:30] + city_state = empresa_dict.get('city_state', '')[:30] + + for factura in facturas: + self.cuenta_facturas += 1 + f_val_total = 0.0 + f_pb = 0.0 + f_pn = 0.0 + f_consec_partidas = 0 + + # MF01: Header per Invoice in Importacion Temporal + mod_trans = factura.logistics.transport_mode if factura.logistics else "30" + f_fecha = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else fecha_trans + + lineas.append( + f"MF01{empresa_dict['broker'][:6]:<6}" + f"{exit_port[:5]:<5}" + f"{entry_port[:5]:<5}" + f"{fecha_trans}" + f" {mod_trans[:2]:<2}" + f"{f_fecha}" + f"{factura.invoice_number[:15]:<15}" + ) + self.cuenta_partidas += 1 + + # MF03: Dynamic Driver/Carrier info + conductor = (factura.logistics.driver_name or "") if factura.logistics else "" + + # Carrier Logic from Clarion: + # IF ERRORCODE() = 35 THEN Loc:NumTransporte = '00000TRUCK' + # ELSE IF GenTra:NombreCorto = '' THEN Loc:NumTransporte = GenTra:Nombre + # ELSE Loc:NumTransporte = GenTra:NombreCorto + carrier = "00000TRUCK" + if factura.logistics: + # Logic simplified: assume carrier_id holds the correct code/name or fallback + carrier = (factura.logistics.carrier_id or "00000TRUCK") + + lineas.append( + f"MF03{carrier[:10]:<10}{conductor[:23]:<23}{entry_port_desc:<15}{exit_port_desc:<15}" + ) + self.cuenta_partidas += 1 + + # MF20 + num_transporte = (factura.logistics.transport_num or "") if factura.logistics else "" + lineas.append( + f"MF20{factura.invoice_number[:15]:<15}I{num_transporte[:15]:<15}{city_state[:20]:<20}" + f"{exit_port[:5]:<5}{entry_port_desc:<15} " + ) + self.cuenta_partidas += 1 + + # MF22 + lineas.append(f"MF22{main_activity:<60}") + self.cuenta_partidas += 1 + + # IV01: Header + f_fecha = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else "000000" + flete = int(round(float(factura.financials.freight or 0))) if factura.financials else 0 + self.flete_total += float(factura.financials.freight or 0) if factura.financials else 0.0 + + s_tax = ""; c_tax = "" + if factura.compliance_mx: + if factura.compliance_mx.sold_to_id: + c_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_obj: c_tax = c_obj.rfc[:12] if c_obj.rfc else "" + if factura.compliance_mx.provider_id: + s_obj = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_obj: s_tax = s_obj.rfc[:12] if s_obj.rfc else "" + + lineas.append( + f"IV01{factura.invoice_number[:15]:<15}{f_fecha}{entry_port:<5}{' ':<11}C" + f"{empresa_dict['broker'][:6]:<6}{flete:08d}{c_tax:<13}" + ) + self.cuenta_partidas += 1 + + # IV02: Shipper Name + lineas.append(f"IV02 {empresa_dict['nombre_empresa'][:40]:<40}") + self.cuenta_partidas += 1 + + # IV10: Responsible + lineas.append(f"IV10 {main_activity[:30]:<30}{empresa_dict['responsable'][:30]:<30}") + self.cuenta_partidas += 1 + + # IV11: Obs + lineas.append(f"IV11H") + lineas.append(f"IV11F") + self.cuenta_partidas += 2 + + # IV12-14 (S, C, T, I) + # Shipper (S) + if factura.compliance_mx and factura.compliance_mx.provider_id: + s_cliente = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.provider_id).first() + if s_cliente: + s_data = self._obtener_datos_cliente(s_cliente) + lineas.append(f"IV12S {s_data['nombre'][:39]:<39}") + lineas.append(f"IV13S {s_data['calle'][:35]:<35}{s_data['cp']:<9}") + lineas.append(f"IV14S{s_data['ciudad'][:20]:<20}{s_data['state_full'][:2] if 'state_full' in s_data else s_data['estado'][:2]}{s_data['pais'][:2]}{s_data['tel'][:30]:<30}{s_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # Consignee (C), Ship To (T), and Intermediate (I) + if factura.compliance_mx and factura.compliance_mx.sold_to_id: + c_cliente = db.query(ClientProvider).filter(ClientProvider.id == factura.compliance_mx.sold_to_id).first() + if c_cliente: + c_data = self._obtener_datos_cliente(c_cliente) + l12c = f"IV12C {c_data['nombre'][:39]:<39}" + l13c = f"IV13C {c_data['calle'][:35]:<35}{c_data['cp']:<9}" + l14c = f"IV14C{c_data['ciudad'][:20]:<20}{c_data['estado'][:2]}{c_data['pais'][:2]}{c_data['tel'][:30]:<30}{c_data['tax_id']:<15}00000" + + # Output C + lineas.extend([l12c, l13c, l14c]) + self.cuenta_partidas += 3 + + # T (Ship To) - Only if different from C + t_id = factura.compliance_mx.shipped_to_id + if t_id and t_id != factura.compliance_mx.sold_to_id: + t_cl = db.query(ClientProvider).filter(ClientProvider.id == t_id).first() + if t_cl: + t_data = self._obtener_datos_cliente(t_cl) + lineas.append(f"IV12T {t_data['nombre'][:39]:<39}") + lineas.append(f"IV13T {t_data['calle'][:35]:<35}{t_data['cp']:<9}") + lineas.append(f"IV14T{t_data['ciudad'][:20]:<20}{t_data['estado'][:2]}{t_data['pais'][:2]}{t_data['tel'][:30]:<30}{t_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # I (Intermediate) - Only if different from C and T + i_id = factura.compliance_mx.shipped_by_id + if i_id and i_id != factura.compliance_mx.sold_to_id and i_id != t_id: + i_cl = db.query(ClientProvider).filter(ClientProvider.id == i_id).first() + if i_cl: + i_data = self._obtener_datos_cliente(i_cl) + lineas.append(f"IV12I {i_data['nombre'][:39]:<39}") + lineas.append(f"IV13I {i_data['calle'][:35]:<35}{i_data['cp']:<9}") + lineas.append(f"IV14I{i_data['ciudad'][:20]:<20}{i_data['estado'][:2]}{i_data['pais'][:2]}{i_data['tel'][:30]:<30}{i_data['tax_id']:<15}00000") + self.cuenta_partidas += 3 + + # Partidas IV20, IV21, IV22, IV24, IV26, IV27 + # Let's get Item IDs first to ensure we find them + items_headers = db.query(LineItem).filter(LineItem.invoice_id == factura.id).all() + item_ids = [ih.id for ih in items_headers] + + if item_ids: + items_query = db.query(LineItem).filter( + LineItem.id.in_(item_ids) + ).options( + joinedload(LineItem.part_info), + joinedload(LineItem.description), + joinedload(LineItem.financial), + joinedload(LineItem.quantity), + joinedload(LineItem.customs), + joinedload(LineItem.unit_of_measure_info) + ).all() + + for line in items_query: + f_consec_partidas += 1 + part_num = line.part_info.part_number if line.part_info else "S/N" + + # IV20 + lineas.append(f"IV20{f_consec_partidas:03d} {part_num[:25]:<25}C") + self.cuenta_partidas += 1 + + # IV21 + lineas.append(f"IV21") + self.cuenta_partidas += 1 + + # Data + val_me = float(line.financial.value_usd or 0) if line.financial else 0.0 + qty = float(line.quantity.quantity or 0) if line.quantity else 0.0 + pb = float(line.quantity.gross_weight or 0) if line.quantity else 0.0 + pn = float(line.quantity.net_weight or 0) if line.quantity else 0.0 + costo_u = float(line.financial.unit_cost_capture or 0) if line.financial else 0.0 + + um = line.unit_of_measure_info.american_code if line.unit_of_measure_info else "PCS" + pais = (line.customs.origin_country or "MX")[:2] if line.customs else "MX" + hts = (line.customs.american_fraction or "").replace(".", "")[:10] if line.customs else "" + + val_int = int(round(val_me * 10000)) + qty_int = int(round(qty * 10000)) + pb_int = int(round(pb * 10000)) + pn_int = int(round(pn * 10000)) + costo_int = int(round(costo_u * 100000)) + + # IV22 + lineas.append( + f"IV22{hts:<10} " + f"{val_int:010d}{um[:3]:<3}{qty_int:09d}{pais:<2}0000010000000000100000 " + f"{pb_int:010d}{pn_int:010d}" + ) + self.cuenta_partidas += 1 + + # IV24, IV26 (Zeros) + lineas.append(f"IV24 0000000000 000000000 0000000000000000000000") + lineas.append(f"IV26 0000000000 000000000 0000000000000000000000") + self.cuenta_partidas += 2 + + # IV27 + lineas.append(f"IV27{hts:<10}{costo_int:011d}0000000000000000000000000000000000000") + self.cuenta_partidas += 1 + + f_val_total += val_me + f_pb += pb + f_pn += pn + + # IV90: Footer per Invoice + + # IV90 + f_val_int = int(round(f_val_total * 100)) + f_pb_int = int(round(f_pb * 10000)) + f_pn_int = int(round(f_pn * 10000)) + lineas.append(f"IV90{f_consec_partidas:05d}{f_val_int:012d}{f_pb_int:010d}{f_pn_int:010d}") + self.cuenta_partidas += 1 + + self.valor_total_factura += f_val_total + self.peso_bruto_factura += f_pb + self.peso_neto_factura += f_pn + + return lineas, self.errores + +class ScaiiTempProcessor(ScafTempProcessor): + """ + Procesador para Importación Temporal (Versión Ligera/SCAII) + Se salta los registros MF20, MF22, IV10-14 para mayor velocidad y menor detalle. + """ + def procesar_facturas( + self, db: Session, facturas_nums: List[str], empresa_dict: Dict[str, Any], request: Mainx30GenerationRequest + ) -> Tuple[List[str], List[ErrorValidacion]]: + lineas = [] + self.errores = [] + + # 1. Traer Facturas por número + facturas = db.query(InvoiceHeader).join( + InvoiceComplianceMx, InvoiceHeader.id == InvoiceComplianceMx.invoice_id + ).options( + joinedload(InvoiceHeader.financials), + joinedload(InvoiceHeader.compliance_mx), + joinedload(InvoiceHeader.logistics) + ).filter( + InvoiceHeader.invoice_number.in_(facturas_nums) + ).all() + + entry_port = request.entry_port or "" + exit_port = request.exit_port or "" + fecha_trans = datetime.now().strftime("%y%m%d") + + entry_port_desc = empresa_dict.get('entry_port_desc', 'PUERTO ENTRADA')[:15] + exit_port_desc = empresa_dict.get('exit_port_desc', 'PUERTO SALIDA')[:15] + + for factura in facturas: + self.cuenta_facturas += 1 + f_val_total = 0.0 + f_consec_partidas = 0 + + # MF01 + mod_trans = factura.logistics.transport_mode if factura.logistics else "30" + f_fecha = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else fecha_trans + lineas.append( + f"MF01{empresa_dict['broker'][:6]:<6}{exit_port[:5]:<5}{entry_port[:5]:<5}" + f"{fecha_trans} {mod_trans[:2]:<2}{f_fecha}{factura.invoice_number[:15]:<15}" + ) + self.cuenta_partidas += 1 + + # MF03 + conductor = (factura.logistics.driver_name or "") if factura.logistics else "" + carrier = (factura.logistics.carrier_id or "00000TRUCK") + lineas.append(f"MF03{carrier[:10]:<10}{conductor[:23]:<23}{entry_port_desc:<15}{exit_port_desc:<15}") + self.cuenta_partidas += 1 + + # IV01 + f_fecha_iv = factura.invoice_date.strftime("%y%m%d") if factura.invoice_date else "000000" + flete = int(round(float(factura.financials.freight or 0))) if factura.financials else 0 + self.flete_total += float(factura.financials.freight or 0) if factura.financials else 0.0 + + lineas.append( + f"IV01{factura.invoice_number[:15]:<15}{f_fecha_iv}{entry_port:<5}{' ':<11}C" + f"{empresa_dict['broker'][:6]:<6}{flete:08d}{'':<13}" + ) + self.cuenta_partidas += 1 + + # Partidas IV20, IV21, IV22 + items_headers = db.query(LineItem).filter(LineItem.invoice_id == factura.id).all() + item_ids = [ih.id for ih in items_headers] + + if item_ids: + items_query = db.query(LineItem).filter(LineItem.id.in_(item_ids)).all() + + for line in items_query: + f_consec_partidas += 1 + part_num = line.part_info.part_number if line.part_info else "S/N" + + # IV20 + lineas.append(f"IV20{f_consec_partidas:03d} {part_num[:25]:<25}C") + self.cuenta_partidas += 1 + + # IV22 + qty = float(line.quantity.quantity or 0) if line.quantity else 0.0 + val_me = float(line.financial.value_usd or 0) if line.financial else 0.0 + hts = (line.customs.american_fraction or "").replace(".", "")[:10] if line.customs else "" + + val_int = int(round(val_me * 10000)) + qty_int = int(round(qty * 10000)) + + lineas.append(f"IV22{hts:<10} {val_int:010d}PCS{qty_int:09d}MX0000010000000000100000 00000000000000000000") + self.cuenta_partidas += 1 + f_val_total += val_me + + # IV90 + fv_int = int(round(f_val_total * 100)) + lineas.append(f"IV90{f_consec_partidas:05d}{fv_int:012d}00000000000000000000") + self.cuenta_partidas += 1 + + self.valor_total_factura += f_val_total + + return lineas, self.errores \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/routes.py b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/routes.py new file mode 100644 index 00000000..e8dbcf51 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/routes.py @@ -0,0 +1,43 @@ +from typing import Dict, Any +from fastapi import APIRouter, Depends, Body +from celery.result import AsyncResult +from core.celery_app import celery_app +from core.security import get_current_user +from .task import generar_transmission_temporal_async +from .schemas import Mainx30GenerationRequest + +router = APIRouter() + +@router.get("/tasks/{task_id}") +async def get_task_status( + task_id: str, + current_user: Dict[str, Any] = Depends(get_current_user) +): + task_result = AsyncResult(task_id, app=celery_app) + + response = { + "task_id": task_id, + "state": task_result.state, + "result": None, + "info": None + } + + if task_result.state == 'FAILURE': + response["result"] = str(task_result.result) + elif task_result.state == 'SUCCESS': + response["result"] = task_result.result + elif task_result.state == 'PROCESSING': + # Ensure info is serializable + response["info"] = task_result.info + + return response + +@router.post("/generate") +async def trigger_generation( + request: Mainx30GenerationRequest, + current_user: Dict[str, Any] = Depends(get_current_user) +): + tenant_id = current_user.get("tenant_id") + # Pass request as dict to Celery task + task = generar_transmission_temporal_async.delay(request.model_dump(), tenant_id) + return {"task_id": task.id, "message": "Generación Temporal iniciada"} diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/schemas.py b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/schemas.py new file mode 100644 index 00000000..1e3d397d --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/schemas.py @@ -0,0 +1,77 @@ +from typing import List, Optional, Any +from pydantic import BaseModel, Field + +class Mainx30GenerationRequest(BaseModel): + """ + Schema for the Mainx30 file generation request + """ + manifiestos: Optional[List[str]] = Field(None, description="Lista de números de manifiesto a procesar") + facturas: Optional[List[str]] = Field(None, description="Lista de números de factura a procesar") + entry_port: Optional[str] = Field(None, description="Puerto de entrada") + exit_port: Optional[str] = Field(None, description="Puerto de salida") + regimen: Optional[str] = Field("Temporal", description="Regimen de importación (Temporal/Definitiva)") + nomenclatura_factura: bool = Field(False, description="Usar nomenclatura basada en factura") + consolidar_rbs: bool = Field(False, description="Consolidar por fracción RB System") + emanifest_fast_blanco: bool = Field(False, description="E-Manifest y FAST en blanco") + no_enviar_emanifest: bool = Field(False, description="No enviar E-Manifest") + consolidar_partidas: bool = Field(False, description="Consolidar partidas (XML OPTIMA Y RBS2)") + main_x40_emanifest: bool = Field(False, description="Main X40 E-Manifest") + main_x30_fedex: bool = Field(False, description="Main X30 (FEDEX)") + iv11: bool = Field(False, description="IV11") + iv42: bool = Field(False, description="IV42") + +class ErrorValidacion(BaseModel): + """ + Schema for validation errors during file generation + """ + partida: int + linea: int + descripcion: str + soluciones: str + identificador: str + campos: str = "" + campos2: str = "" + +class Mainx30Response(BaseModel): + """ + Schema for the generation response + """ + success: bool + message: str + task_id: Optional[str] = None + archivo_generado: Optional[str] = None + ruta_archivo: Optional[str] = None + content: Optional[str] = None + + # Statistics + cuenta_partidas: int = 0 + valor_total: float = 0.0 + flete_total: float = 0.0 + peso_bruto_total: float = 0.0 + peso_neto_total: float = 0.0 + cuenta_facturas: int = 0 + + # Validation + errores: List[ErrorValidacion] = [] + tiene_inconsistencias: bool = False + +class BrokerValidationResult(BaseModel): + es_valido: bool + mensaje_error: Optional[str] = None + broker_cliente: Optional[str] = None + +class EmpresaDatos(BaseModel): + broker: str + responsable: str + rfc: str + tiene_linea_express: str + nombre_empresa: str = "AAKRON RULE CORPORATION" + manufacturer_id: str = "I10900" + ftp_key: str = "00SCSI" + main_activity: str = "RAW MATERIAL" + city_state: str = "" + +class ConfiguracionSistema(BaseModel): + path_arch_transmision: str + utilizar_nombre_generico_mainx30: bool + utilizar_codigo_broker_cliente: bool diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/service.py b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/service.py new file mode 100644 index 00000000..78dadbc6 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/service.py @@ -0,0 +1,177 @@ +import os +import tempfile +from datetime import date, datetime +from typing import List, Tuple, Optional, Dict, Any +from pathlib import Path + +from sqlalchemy.orm import Session, joinedload +from fastapi import HTTPException + +from .schemas import ( + Mainx30GenerationRequest, Mainx30Response, ErrorValidacion, + EmpresaDatos, ConfiguracionSistema +) + +# --- MODELOS A76 --- +from api.v1.modules.a76.manifests.manifest.models import Manifest +from api.v1.modules.a76.general_catalogs.company.models import Company as GEmpresa +from api.v1.modules.a76.general_catalogs.ports.models import Port + +# --- PROCESADORES --- +from .processors import ScaiiProcessor, ScafDefProcessor, ScafTempProcessor, ScaiiTempProcessor + +class Mainx30Service: + def __init__(self): + self.errores_validacion: List[ErrorValidacion] = [] + self.cuenta_partidas = 0 + self.cuenta_facturas = 0 + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + + def generar_mainx30( + self, + db: Session, + request: Mainx30GenerationRequest, + task_instance=None + ) -> Mainx30Response: + try: + self._inicializar_variables() + + # 1. Obtener Datos de Empresa + datos_empresa = self._obtener_datos_company(db) + emp_dict = datos_empresa.model_dump() + + # 2. Obtener Descripciones de Puertos + if request.entry_port: + p_ent = db.query(Port).filter(Port.port_code == request.entry_port).first() + if p_ent: emp_dict['entry_port_desc'] = p_ent.description or p_ent.location_description or "" + + if request.exit_port: + p_sal = db.query(Port).filter(Port.port_code == request.exit_port).first() + if p_sal: emp_dict['exit_port_desc'] = p_sal.description or p_sal.location_description or "" + + # 3. Fecha de Transmisión (Clarion @D11 = mm/dd/yy, but example uses YYMMDD) + fecha_transmision = datetime.now().strftime("%y%m%d") + + # 4. Determinar Procesador + processor = ScafTempProcessor() # Now 'Temporal' defaults to Heavy (SCAF) logic per user request + if request.regimen == "TEMPORAL SCAF": + processor = ScaiiTempProcessor() # 'TEMPORAL SCAF' uses light (SCAII) logic + elif request.regimen == "Definitiva" or request.regimen == "DEFINITIVO SCAF": + processor = ScafDefProcessor() + + # 5. Procesar Facturas + if not request.facturas: + raise HTTPException(status_code=400, detail="No se proporcionaron facturas para procesar.") + + l_facturas, e_facturas = processor.procesar_facturas(db, request.facturas, emp_dict, request) + + self.errores_validacion.extend(e_facturas) + + # 6. Construir Líneas del Archivo + lineas = [] + + # Línea A + broker = (datos_empresa.broker or "")[:6] + ftp_key = (datos_empresa.ftp_key or "00SCSI")[:6] + lineas.append(f"A {fecha_transmision}03{broker:<6}{broker:<10}{ftp_key:<6}") + self.cuenta_partidas += 1 + + # Agregar Líneas de Facturas + lineas.extend(l_facturas) + self.cuenta_partidas += processor.cuenta_partidas + self.cuenta_facturas = processor.cuenta_facturas + self.valor_total = processor.valor_total_factura + self.peso_bruto_total = processor.peso_bruto_factura + self.peso_neto_total = processor.peso_neto_factura + + # MF80 (Totales Globales) + val_int = int(round(self.valor_total * 100)) + pb_int = int(round(self.peso_bruto_total * 10000)) + pn_int = int(round(self.peso_neto_total * 10000)) + flete_int = 0 + + lineas.append( + f"MF80{val_int:012d}" + f"{self.cuenta_facturas:04d}" + f"{pb_int:012d}" + f"{flete_int:08d}" + f"{pn_int:012d}" + ) + self.cuenta_partidas += 1 + + # Línea Z (Total de líneas) + lineas.append(f"Z {self.cuenta_partidas:05d}") + self.cuenta_partidas += 1 + + # 7. Generar Nombre y Guardar + nombre_archivo = f"{request.facturas[0][:15]}_Mainx30.dat" + if len(request.facturas) > 1: + nombre_archivo = f"MULTIPLE_Mainx30.dat" + + if request.nomenclatura_factura and len(request.facturas) == 1: + nombre_archivo = f"{request.facturas[0][:15]}_Mainx30.dat" + + content = '\r\n'.join(lineas) + + return Mainx30Response( + success=len(self.errores_validacion) == 0, + message="Archivo generado" if len(self.errores_validacion) == 0 else "Archivo generado con errores de validación", + archivo_generado=nombre_archivo, + ruta_archivo="", + content=content, + errores_validacion=self.errores_validacion, + cuenta_partidas=self.cuenta_partidas, + valor_total=self.valor_total, + peso_bruto_total=self.peso_bruto_total, + peso_neto_total=self.peso_neto_total, + cuenta_facturas=self.cuenta_facturas + ) + + except HTTPException: + raise + except Exception as e: + import traceback + traceback.print_exc() + raise HTTPException(status_code=500, detail=f"Error generando Mainx30: {str(e)}") + + def _inicializar_variables(self): + self.errores_validacion = [] + self.cuenta_partidas = 0 + self.valor_total = 0.0 + self.flete_total = 0.0 + self.peso_bruto_total = 0.0 + self.peso_neto_total = 0.0 + self.cuenta_facturas = 0 + + def _obtener_datos_company(self, db: Session) -> EmpresaDatos: + empresa = db.query(GEmpresa).options(joinedload(GEmpresa.addresses)).first() + if not empresa: + return EmpresaDatos(broker="", responsable="", rfc="", tiene_linea_express="N", nombre_empresa="", manufacturer_id="", ftp_key="", main_activity="", city_state="") + + # Get city/state from main address, or first found + city_state = "" + main_addr = next((a for a in (empresa.addresses or []) if a.address_type == 'main'), None) + if not main_addr and empresa.addresses: + main_addr = empresa.addresses[0] + + if main_addr: + # Clarion expects 20 chars for city_state: 5 CP + 11 City + 4 State + cp = (main_addr.postal_code or "")[:5] + city = (main_addr.city or "")[:11] + state = (main_addr.state or "")[:4] + city_state = f"{cp:<5}{city:<11}{state:<4}" + + return EmpresaDatos( + broker=(empresa.broker_company or "")[:5], + responsable=(empresa.responsible or "")[:30], + rfc=(empresa.rfc or "")[:13], + tiene_linea_express=empresa.has_express_line or "N", + nombre_empresa=(empresa.name or "")[:40], + manufacturer_id=(empresa.manufacturer_id or "")[:10], + ftp_key=(empresa.ftp_key or "")[:10], + main_activity=(empresa.main_activity or "")[:30], + city_state=city_state[:30] + ) \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/task.py b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/task.py new file mode 100644 index 00000000..ae7cca36 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/importacion/transmission/temporal/MAINX30/task.py @@ -0,0 +1,46 @@ +from celery import Task +from core.celery_app import celery_app +from core.celery_app import celery_app +from core.database import get_core_db as get_db +from .service import Mainx30Service +from .schemas import Mainx30GenerationRequest, Mainx30Response + +@celery_app.task(name="generar_transmission_temporal_async", bind=True) +def generar_transmission_temporal_async(self, request_data: dict, tenant_id: int): + """ + Generates the transmission .dat file asynchronously using Mainx30Service + """ + try: + # Re-create db session for task + # Using next(get_db()) is a common pattern for obtaining a session in tasks + # but ensure context management + db = next(get_db()) + + # Deserialize request + request = Mainx30GenerationRequest(**request_data) + + service = Mainx30Service() + response = service.generar_mainx30(db, request, task_instance=self) + + # Return result as dict for Celery serialization + # Ensure we return valid JSON serializable dict + result = response.model_dump() + + # If we returned content directly, encode it if it's bytes (it's str here) + if response.content: + import base64 + # Mainx30Service returns content as string with \r\n + encoded_content = base64.b64encode(response.content.encode('utf-8')).decode('utf-8') + # Add to result to match expected format by frontend dialog + result['content'] = encoded_content + result['file_name'] = response.archivo_generado + result['media_type'] = "text/plain" + + return result + + except Exception as e: + import traceback + traceback.print_exc() + self.update_state(state='FAILURE', meta={'exc_type': type(e).__name__, 'exc_message': str(e)}) + # Re-raise to mark task as failed in Celery + raise e diff --git a/backend/api/v1/modules/a76/reports/movements/__init__.py b/backend/api/v1/modules/a76/reports/movements/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/__init__.py b/backend/api/v1/modules/a76/reports/movements/invoices/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py new file mode 100644 index 00000000..be0ea597 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/csv_utils.py @@ -0,0 +1,151 @@ +""" +CSV generation utilities for invoice movement reports. +""" +import csv +import io +from typing import List, Union +from datetime import datetime, date + +from .schemas import MovementItem, MovementItemDetailed, AllMovementsFilter + + +def generate_csv_from_movements( + movements: List[Union[MovementItem, MovementItemDetailed]], + filters: AllMovementsFilter +) -> str: + """ + Generate CSV content from movement items. + + Args: + movements: List of movement items (normal or detailed) + filters: Filter object containing report parameters + + Returns: + CSV content as string + """ + output = io.StringIO() + + if filters.report_type.value.lower() == "normal": + # Normal report + fieldnames = [ + # Identification + 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', + # Values + 'ValorComercialMN', 'ValorMPTemp', 'TipoCambio', 'ValorAgre', + # Classification + 'TipoMovTemDef', 'Estatus', 'TipoExpo', 'EsCambioRegimen', + # Dates + 'Fecha_Pago', + # References + 'PedimentoR1', 'EDocument', 'NumOperacionVU', + # Logistics + 'NumCaja', 'NumGafUni', 'AduanaCru', + # Metadata + 'BaseDeDatos', 'UsuarioCap', 'UsuarioAcr' + ] + + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') + writer.writeheader() + + for movement in movements: + row = movement.model_dump() + # Format datetime fields + row['FechaFactura'] = _format_datetime(row.get('FechaFactura')) + row['Fecha_Pago'] = _format_datetime(row.get('Fecha_Pago')) + + # Format numeric fields + row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) + row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) + row['ValorMPTemp'] = _format_decimal(row.get('ValorMPTemp')) + row['ValorAgre'] = _format_decimal(row.get('ValorAgre')) + + writer.writerow(row) + + else: + # Detailed report + fieldnames = [ + # Identification + 'Linea', 'Factura', 'Pedimento', 'FechaFactura', 'ClavePed', + # Parties + 'Proveedor', 'RFCProveedor', 'ProveedorTaxID', + 'VendidoA', 'VendidoARFC', 'VendidoATaxID', + # Customs broker + 'AgenteAduanal', 'Patente', + # Product + 'NumParte', 'DescripcionE', 'DescripcionI', 'CantidadIE', 'UniMed', + # Classification + 'FraccionArancelaria', 'FraccionAmericana', 'ECCN', 'Sector', 'PaisOrigen', + # Values + 'ValorComercialMN', 'TipoCambio', 'PesoNeto', 'PesoBruto', + # Customs + 'TipoMovTemDef', 'Regimen', 'Aduana', 'Advalorem', 'Preferencia', + # References + 'OrdenCompraVenta', 'Remesa', 'PedimentoR1', 'EDocument', 'NumOperacionVU', + # Identifiers + 'Series', 'Marca', 'Modelo', 'SimboloEx', + # Dates + 'Fecha_Pago', 'Fecha_Inicio', 'Fecha_Fin', 'FechaEmision', + # Logistics + 'Transportista', 'NumCaja', 'NumGafUni', 'AduanaCru', 'Lote', + # Metadata + 'Estatus', 'BaseDeDatos', 'TipoExpo', 'EsCambioRegimen', 'Pedimento18', + 'UsuarioCap', 'UsuarioAcr' + ] + + writer = csv.DictWriter(output, fieldnames=fieldnames, extrasaction='ignore') + writer.writeheader() + + for movement in movements: + row = movement.model_dump() + # Format datetime fields + row['FechaFactura'] = _format_datetime(row.get('FechaFactura')) + row['Fecha_Pago'] = _format_datetime(row.get('Fecha_Pago')) + row['Fecha_Inicio'] = _format_datetime(row.get('Fecha_Inicio')) + row['Fecha_Fin'] = _format_datetime(row.get('Fecha_Fin')) + row['FechaEmision'] = _format_datetime(row.get('FechaEmision')) + + # Format numeric fields + row['ValorComercialMN'] = _format_decimal(row.get('ValorComercialMN')) + row['TipoCambio'] = _format_decimal(row.get('TipoCambio')) + row['CantidadIE'] = _format_decimal(row.get('CantidadIE')) + row['PesoNeto'] = _format_decimal(row.get('PesoNeto')) + row['PesoBruto'] = _format_decimal(row.get('PesoBruto')) + + writer.writerow(row) + + csv_content = output.getvalue() + output.close() + return csv_content + + +def _format_datetime(dt) -> str: + """Format datetime for CSV export.""" + if not dt or dt == '' or dt == '-' or dt == '0': + return '' + try: + if isinstance(dt, str): + if 'T' in dt: + dt_obj = datetime.strptime(dt.split('T')[0], '%Y-%m-%d') + elif len(dt) == 8 and dt.isdigit(): + dt_obj = datetime.strptime(dt, '%Y%m%d') + elif '-' in dt: + dt_obj = datetime.strptime(dt, '%Y-%m-%d') + else: + return dt + elif isinstance(dt, (datetime, date)): + dt_obj = dt + else: + return '' + return dt_obj.strftime('%d/%m/%Y') + except (ValueError, TypeError): + return str(dt) if dt else '' + + +def _format_decimal(value, decimals: int = 2) -> str: + """Format decimal values for CSV export.""" + if value is None: + return '' + try: + return f"{float(value):.{decimals}f}" + except (ValueError, TypeError): + return str(value) if value else '' \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py new file mode 100644 index 00000000..41af2b37 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/movement_service.py @@ -0,0 +1,316 @@ +""" +Unified service for invoice movement operations. +This service delegates to specialized handlers for each import type. +""" + +import logging +from sqlalchemy.orm import Session +from typing import List + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + ExportRepairFilter, + AllMovementsFilter, + MovementItem, + MovementItemDetailed, + ReportType +) +from .services.temporary import TemporaryImportService +from .services.definitive import DefinitiveImportService +from .services.repair import RepairImportService +from .services.export import ExportService +from .services.export_repair import ExportRepairService + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Unified service for handling all types of movements. + Delegates to specialized services for each movement type. + """ + + def __init__(self): + self.temporary_service = TemporaryImportService() + self.definitive_service = DefinitiveImportService() + self.repair_service = RepairImportService() + self.export_service = ExportService() + self.export_repair_service = ExportRepairService() + + # ===== TEMPORARY IMPORTS ===== + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """Get temporary import movements (normal mode - grouped by invoice).""" + return self.temporary_service.get_movements(db, filters) + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """Get temporary import movements (detailed mode - line by line).""" + return self.temporary_service.get_movements_detailed(db, filters) + + # ===== DEFINITIVE IMPORTS ===== + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """Get definitive import movements (normal mode - grouped by invoice).""" + return self.definitive_service.get_movements(db, filters) + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """Get definitive import movements (detailed mode - line by line).""" + return self.definitive_service.get_movements_detailed(db, filters) + + # ===== REPAIR IMPORTS ===== + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """Get repair import movements (normal mode - grouped by invoice).""" + return self.repair_service.get_movements(db, filters) + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """Get repair import movements (detailed mode - line by line).""" + return self.repair_service.get_movements_detailed(db, filters) + + # ===== EXPORTS ===== + + def get_export_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """Get export movements (normal mode - grouped by invoice).""" + return self.export_service.get_movements(db, filters) + + def get_export_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """Get export movements (detailed mode - line by line).""" + return self.export_service.get_movements_detailed(db, filters) + + # ===== EXPORT REPAIRS ===== + + def get_export_repair_movements( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItem]: + """Get export repair movements (normal mode - grouped by invoice).""" + return self.export_repair_service.get_movements(db, filters) + + def get_export_repair_movements_detailed( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItemDetailed]: + """Get export repair movements (detailed mode - line by line).""" + return self.export_repair_service.get_movements_detailed(db, filters) + + # ===== ALL MOVEMENTS ===== + + def get_all_movements( + self, + db: Session, + filters: AllMovementsFilter + ) -> List[MovementItem]: + """ + Get all invoice movements (all types combined). + + This combines: + - Temporary imports + - Definitive imports + - Repair imports + - All export types + - Export repairs + + Returns a unified list sorted by date. + """ + all_movements = [] + + # Convert AllMovementsFilter to individual filter types + # We'll use the same filter parameters for all queries + + # Determine which services to call based on granular flags + # Default behavior: If granular flags are all defaults (True) but operation_type is set, + # we might need to respect operation_type. + # But for simplicity, we assume granular flags from frontend are the source of truth. + # If frontend didn't set them (legacy call?), they default to True. + + # Override based on operation_type if provided (legacy compatibility or coarse filter) + if filters.operation_type == 'imp': + filters.export_def = False + filters.export_rep = False + elif filters.operation_type == 'exp': + filters.import_temp = False + filters.import_def = False + filters.import_rep = False + + logger.info(f"Fetching movements with flags: Temp={filters.import_temp}, Def={filters.import_def}, Rep={filters.import_rep}, ExpDef={filters.export_def}, ExpRep={filters.export_rep}") + + # 1. Temporary Imports + if filters.import_temp: + temp_filter = ImportTemporaryFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default' + ) + if filters.report_type == ReportType.DETAILED: + temp_movements = self.temporary_service.get_movements_detailed(db, temp_filter) + else: + temp_movements = self.temporary_service.get_movements(db, temp_filter) + all_movements.extend(temp_movements) + logger.info(f"Added {len(temp_movements)} temporary import movements") + + # 2. Definitive Imports + if filters.import_def: + def_filter = ImportDefinitiveFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + def_movements = self.definitive_service.get_movements_detailed(db, def_filter) + else: + def_movements = self.definitive_service.get_movements(db, def_filter) + all_movements.extend(def_movements) + logger.info(f"Added {len(def_movements)} definitive import movements") + + # 3. Repair Imports + if filters.import_rep: + repair_filter = ImportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + discharge_filter='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + repair_movements = self.repair_service.get_movements_detailed(db, repair_filter) + else: + repair_movements = self.repair_service.get_movements(db, repair_filter) + all_movements.extend(repair_movements) + logger.info(f"Added {len(repair_movements)} repair import movements") + + # 4. Exports (Definitive) + if filters.export_def: + export_filter = ExportFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + discharge_filter='ALL', + use_transport_method=False + ) + if filters.report_type == ReportType.DETAILED: + export_movements = self.export_service.get_movements_detailed(db, export_filter) + else: + export_movements = self.export_service.get_movements(db, export_filter) + all_movements.extend(export_movements) + logger.info(f"Added {len(export_movements)} export movements") + + # 5. Export Repairs + if filters.export_rep: + export_repair_filter = ExportRepairFilter( + range_type=filters.range_type, + start_date=filters.start_date, + end_date=filters.end_date, + include_cancelled=filters.include_cancelled, + provider=filters.provider, + buyer=filters.buyer, + pedimento_code=filters.pedimento_code, + report_type=filters.report_type, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + is_shelter=filters.is_shelter, + database_name='default', + movement_type='ALL', + discharge_filter='ALL' + ) + if filters.report_type == ReportType.DETAILED: + export_repair_movements = self.export_repair_service.get_movements_detailed(db, export_repair_filter) + else: + export_repair_movements = self.export_repair_service.get_movements(db, export_repair_filter) + all_movements.extend(export_repair_movements) + logger.info(f"Added {len(export_repair_movements)} export repair movements") + + # Sort all movements by date (Fecha field) + # Handle mixed datetime and string types + def get_sort_key(movement): + fecha = movement.FechaFactura + if not fecha: + return "" + # Convert datetime to string for consistent comparison + if hasattr(fecha, 'strftime'): + return fecha.strftime('%Y%m%d') + return str(fecha) + + all_movements.sort(key=get_sort_key) + + logger.info(f"Total movements combined: {len(all_movements)}") + return all_movements + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/routes.py b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py new file mode 100644 index 00000000..351e4d9e --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/routes.py @@ -0,0 +1,748 @@ +import logging +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.orm import Session +from typing import List, Union + +from core.database import get_core_db +from core.security import get_current_user +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + ExportRepairFilter, + AllMovementsFilter, + MovementItem, + MovementItemDetailed +) +from .movement_service import movement_service + +logger = logging.getLogger(__name__) + +router = APIRouter( + tags=["Reports - Movement Invoices"] +) + + +@router.post( + "/temporary", + response_model=List[MovementItem], + summary="Get Temporary Import Movements", + description=""" + Retrieve temporary import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADOTEMPORAL' (Fill Temporary) logic from the legacy system. + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_temporary_import_movements( + filters: ImportTemporaryFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get temporary import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting temporary import movements" + ) + movements = movement_service.get_temporary_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} movements") + return movements + except ValueError as e: + logger.warning(f"Validation error fetching movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + logger.error(f"Error fetching movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing import temporary movements: {str(e)}" + ) + + +@router.post( + "/temporary-detailed", + response_model=List[MovementItemDetailed], + summary="Get Detailed Temporary Import Movements", + description=""" + Retrieve detailed temporary import movements (line by line) from legacy database. + This endpoint corresponds to the 'LLENADOTEMPORAL - DETALLADO' logic from the legacy system. + + Each line/partida is returned separately with complete information including: + - Provider and buyer details (name, RFC, Tax ID) + - Customs broker information + - Item descriptions and specifications + - Series information + - All related metadata + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_temporary_import_movements_detailed( + filters: ImportTemporaryFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed temporary import movements (line by line) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of detailed movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting DETAILED temporary import movements" + ) + movements = movement_service.get_temporary_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed movements") + return movements + except ValueError as e: + logger.warning(f"Validation error fetching detailed movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + logger.error(f"Error fetching detailed movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed import temporary movements: {str(e)}" + ) + + +@router.post( + "/definitive", + response_model=List[MovementItem], + summary="Get Definitive Import Movements", + description=""" + Retrieve definitive import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADODEFINITIVO - NORMAL' logic from the legacy system. + + Definitive imports are aggregated by invoice number and can be filtered by: + - Movement type (COMEX or IMPDF based on ProvImpoDefCR field) + - Date range (invoice date or payment date) + - Provider and buyer + - Pedimento code + - Status (active or including cancelled) + + **Special Features**: + - Supports shelter company logic for exchange rate calculations + - MetTrans# = 1 logic for specific pedimento types (1, 4, 98E) + - Retrieves driver badge information + - Handles rectification pedimento lookups + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_definitive_import_movements( + filters: ImportDefinitiveFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get definitive import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting definitive import movements" + ) + movements = movement_service.get_definitive_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} definitive movements") + return movements + except Exception as e: + logger.error(f"Error fetching definitive movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing definitive import movements: {str(e)}" + ) + + +@router.post( + "/definitive-detailed", + response_model=List[MovementItemDetailed], + summary="Get Detailed Definitive Import Movements", + description=""" + Retrieve detailed definitive import movements (line by line) from legacy database. + This endpoint corresponds to the 'LLENADODEFINITIVO - DETALLADO' logic from the legacy system. + + Each line/partida is returned separately with complete information including: + - Provider and buyer details (name, RFC, Tax ID) + - Customs broker information + - Item descriptions and specifications + - Series information from QSeriesDef table + - All related metadata + + **Special Logic**: + - Only Partidas (EsSubPartida = 'P') have values calculated + - Subpartidas (EsSubPartida = 'S') return with zero values + - Series formatted as: "1) SERIE123. Modelo: MOD1. Parte: PART1 | 2) SERIE456..." + - Exchange rate calculation supports shelter and non-shelter logic + - MetTrans# = 1 logic for pedimento types 1, 4, 98E + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_definitive_import_movements_detailed( + filters: ImportDefinitiveFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed definitive import movements (line by line) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of detailed movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting DETAILED definitive import movements" + ) + movements = movement_service.get_definitive_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed definitive movements") + return movements + except Exception as e: + logger.error(f"Error fetching detailed definitive movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed definitive import movements: {str(e)}" + ) + + +@router.post( + "/repair", + response_model=List[MovementItem], + summary="Get Repair Import Movements", + description=""" + Retrieve repair import movements from legacy database based on filter criteria. + This endpoint corresponds to the 'LLENADOIMP_REPARACION - NORMAL' logic from the legacy system. + + Repair imports are aggregated by invoice number and can be filtered by: + - Discharge status (SiDes: discharged, NoDes: not discharged, ALL: no filter) + - Date range (invoice date or payment date) + - Provider and buyer + - Pedimento code + - Status (active or including cancelled) + + **Special Features**: + - Excludes regime changes (EsCambioRegimen <> 'S') + - Supports discharge filter (unique to repair imports) + - Exchange rate calculation with shelter/non-shelter logic + - MetTrans# = 1 logic for specific pedimento types (1, 4, 98E) + - Retrieves driver badge information + + **Database Tables**: + - QFacImpRep: Repair import invoices + - QEqiMaqRep: Repair import items/partidas + - QPedimentos: Pedimentos (customs declarations) + + **Note**: Requires connection to legacy SQL Server database. + """ +) +def get_repair_import_movements( + filters: ImportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get repair import movements based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting repair import movements" + ) + movements = movement_service.get_repair_import_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} repair movements") + return movements + except Exception as e: + logger.error(f"Error fetching repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing repair import movements: {str(e)}" + ) + + +@router.post( + "/repair-detailed", + response_model=List[MovementItemDetailed], + summary="Get detailed repair import movements", + description=""" + Retrieve detailed repair import movements (IMPRE) with individual partida lines. + + **LLENADOIMP_REPARACION - DETALLADO** + + Returns individual partida (line item) records for repair imports with full detail including: + - Complete invoice and customs clearance information + - Series, model, and part numbers for each item + - Client/supplier and sold-to information with tax IDs + - Exchange rate calculations (MN/ME) based on filter options + - Customs agent and customs section details + - Driver badge unique number + - All partida-level fields (part number, descriptions, quantities, weights, etc.) + + **Discharge Filter Options:** + - `SiDes`: Only include discharged items (Descarga = 1) + - `NoDes`: Only include non-discharged items (Descarga = 0) + - `ALL`: Include all items regardless of discharge status + + **Database Tables Used:** + - QFacImpRep: Repair import invoices + - QPedimentos: Customs declarations + - QEqiMaqRep: Repair import partidas (line items) + - QSeriesImpoRep: Series information + - GClientesPro: Suppliers + - GCliVendido: Sold-to clients + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers (for badge numbers) + - GTipoCambio: Exchange rates + """, + tags=["Import Movements - Repair"] +) +async def get_import_repair_movements_detailed( + filters: ImportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed repair import movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed repair movements") + movements = movement_service.get_repair_import_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed repair partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed repair import movements: {str(e)}" + ) + + +@router.post( + "/export", + response_model=List[MovementItem], + summary="Get export movements", + description=""" + Retrieve export movements (EXPO DEF) grouped by invoice. + + **LLENADOEXPORTACION - NORMAL** + + Returns aggregated data grouped by invoice number for export movements. + + **Movement Type Options:** + - `AFIJO`: Fixed assets + - `NODES`: No discharge + - `SCRAP`: Scrap materials + - `REEXP`: Re-exports + - `DONAC`: Donations + - `VEMEX`: Sales to Mexico + - `ALL`: All movement types + + **Discharge Filter Options:** + - `SiDes`: Only discharged items (Descarga = 1) + - `NoDes`: Only non-discharged items (Descarga = 0) + - `ALL`: All items regardless of discharge status + + **Database Tables Used:** + - QFacExp: Export invoices + - QEqeMaq: Export partidas (line items) + - QPedimentos: Customs declarations + - QClaAct: Part classifications + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers + - GTipoCambio: Exchange rates + + Automatically excludes regime changes (EsCambioRegimen = 'N') + """, + tags=["Export Movements"] +) +async def get_export_movements( + filters: ExportFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get export movements based on filter criteria. + Returns aggregated data grouped by invoice. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting export movements") + movements = movement_service.get_export_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} export movements") + return movements + except Exception as e: + logger.error(f"Error fetching export movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing export movements: {str(e)}" + ) + + +@router.post( + "/export-detailed", + response_model=List[MovementItemDetailed], + summary="Get detailed export movements", + description=""" + Retrieve detailed export movements with individual partida lines. + + **LLENADOEXPORTACION - DETALLADO** + + Returns individual partida (line item) records for exports with full detail including: + - Complete invoice and customs clearance information + - Series, model, and part numbers for each item + - Client/supplier and buyer information with tax IDs + - Exchange rate calculations (MN/ME) based on filter options + - Customs agent and customs section details + - Driver badge unique number + - All partida-level fields + + **Movement Type Options:** + - `AFIJO`: Fixed assets + - `NODES`: No discharge + - `SCRAP`: Scrap materials + - `REEXP`: Re-exports + - `DONAC`: Donations + - `VEMEX`: Sales to Mexico + - `ALL`: All movement types + + **Discharge Filter Options:** + - `SiDes`: Only discharged items + - `NoDes`: Only non-discharged items + - `ALL`: All items + + **Database Tables Used:** + - QFacExp: Export invoices + - QEqeMaq: Export partidas + - QSeriesExpo: Serial numbers + - QPedimentos: Customs declarations + - GClientesPro: Suppliers + - GCliVendido: Buyers + - GAAduanal: Customs agents + - GAduanaSec: Customs sections + - GConductor: Drivers + - GTipoCambio: Exchange rates + """, + tags=["Export Movements"] +) +async def get_export_movements_detailed( + filters: ExportFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed export movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed export movements") + movements = movement_service.get_export_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed export partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed export movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed export movements: {str(e)}" + ) + + +@router.post("/export-repair", response_model=List[MovementItem]) +def get_export_repair_movements( + filters: ExportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + **LLENADOEXP_REPARACION - NORMAL** + + Get export repair movements (EXPO REP) based on filter criteria. + Groups results by invoice (FacturaExpo). + + Clarion logic: + - Query from QFacExpRep, QEqeMaqRep tables + - Filters: date range (FF/FP), provider, buyer, pedimento code + - Movement types: AFIJO, NODES + - Discharge filter: SiDes, NoDes, or ALL + - Calculates totals from partidas where EsSubpartida = 'P' + - Exchange rate logic based on currency type and Scaii.ini MetTrans + - Always filters by EsCambioRegimen = 'N' + """ + try: + logger.info(f"User {current_user.get('sub')} requesting export repair movements") + movements = movement_service.get_export_repair_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} export repair invoices") + return movements + except Exception as e: + logger.error(f"Error fetching export repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing export repair movements: {str(e)}" + ) + + +@router.post("/export-repair-detailed", response_model=List[MovementItemDetailed]) +def get_export_repair_movements_detailed( + filters: ExportRepairFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get detailed export repair movements based on filter criteria. + Returns partida-level detail with series information and full client/customs data. + """ + try: + logger.info(f"User {current_user.get('sub')} requesting detailed export repair movements") + movements = movement_service.get_export_repair_movements_detailed( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} detailed export repair partidas") + return movements + except Exception as e: + logger.error(f"Error fetching detailed export repair movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing detailed export repair movements: {str(e)}" + ) + + +@router.post( + "/all", + response_model=Union[List[MovementItemDetailed], List[MovementItem]], + summary="Get All Invoice Movements", + description=""" + Retrieve all invoice movements (imports and exports of all types) from database. + This endpoint combines temporary, definitive, and repair imports with all export types. + + Use this when "TODAS" checkbox is selected to get a comprehensive view of all movements + regardless of their specific type. + + If send_email is True, the report will be sent to the authenticated user's email address. + """ +) +async def get_all_movements( + filters: AllMovementsFilter, + db: Session = Depends(get_core_db), + current_user: dict = Depends(get_current_user) +): + """ + Get all invoice movements (all types combined) based on filters. + + Args: + filters: Filter criteria for querying movements + db: Database session + current_user: Authenticated user information + + Returns: + List of all movement items matching the criteria + + Raises: + HTTPException: If database query fails or user is unauthorized + """ + try: + logger.info( + f"User {current_user.get('preferred_username', 'unknown')} " + f"requesting all invoice movements (send_email={filters.send_email})" + ) + movements = movement_service.get_all_movements( + db=db, + filters=filters + ) + logger.info(f"Successfully retrieved {len(movements)} total movements") + + # Send email if requested + if filters.send_email: + user_email = current_user.get('email') + if not user_email: + logger.warning(f"User {current_user.get('sub')} has no email address - skipping email") + else: + try: + from core.email import EmailService + from .csv_utils import generate_csv_from_movements + from datetime import datetime + + # Generate CSV + csv_content = generate_csv_from_movements( + movements=movements, + filters=filters + ) + + # Generate filename + filename = f"reporte_facturas_{filters.start_date}_{filters.end_date}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + # Send email + email_sent = await EmailService.send_report_email( + recipient_email=user_email, + subject=f"Reporte de Facturas - {filters.start_date} al {filters.end_date}", + body_text=f"Se ha generado el reporte de facturas solicitado con {len(movements)} registros.", + csv_content=csv_content, + filename=filename + ) + + if email_sent: + logger.info(f"Report emailed successfully to {user_email}") + else: + logger.warning(f"Failed to send email to {user_email} - SMTP may not be configured correctly") + + except Exception as email_error: + logger.warning(f"Email sending failed: {str(email_error)} - continuing with report generation") + + return movements + return movements + except ValueError as e: + logger.warning(f"Validation error fetching all movements: {str(e)}") + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except HTTPException: + raise + except Exception as e: + logger.error(f"Error fetching all movements: {str(e)}", exc_info=True) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error processing all movements: {str(e)}" + ) + + +@router.post( + "/generate", + summary="Generate Invoice Report (Async)", + description="Trigger background generation of invoice report." +) +def generate_invoice_report_async( + filters: AllMovementsFilter, + current_user: dict = Depends(get_current_user) +): + """ + Trigger background generation of invoice report. + Returns task_id to poll status. + """ + from .tasks import generate_invoice_movements_async + + logger.info(f"User {current_user.get('preferred_username', 'unknown')} triggering async report generation") + + # Serialize filters to dict for Celery + filter_data = filters.model_dump() + user_email = current_user.get('email') + + # Trigger task + task = generate_invoice_movements_async.delay(filter_data, user_email) + + return {"task_id": task.id} + + +@router.get( + "/task/{task_id}", + summary="Get Async Task Status", + description="Check status of background report generation task." +) +def get_task_status(task_id: str): + """ + Get status of background task. + """ + from celery.result import AsyncResult + from core.celery_app import celery_app + + task_result = AsyncResult(task_id, app=celery_app) + + response = { + "task_id": task_id, + "status": task_result.status, + } + + if task_result.state == 'PROCESSING': + response["meta"] = task_result.info + + if task_result.ready(): + response["result"] = task_result.result + + return response diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py new file mode 100644 index 00000000..002331cf --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/schemas.py @@ -0,0 +1,609 @@ +from typing import Optional +from pydantic import BaseModel, Field +from datetime import datetime, date +from enum import Enum + + +class RangeType(str, Enum): + """Date range type for filtering""" + INVOICE_DATE = "FF" # Filter by invoice date + PAYMENT_DATE = "FP" # Filter by payment date + + +class ReportType(str, Enum): + """Report type""" + NORMAL = "Normal" + DETAILED = "Detallado" + + +class CurrencyType(str, Enum): + """Currency type for calculations""" + FOREIGN = "ME" # Foreign currency (Moneda Extranjera) + LOCAL = "MN" # Local currency (Moneda Nacional) + + +class ExchangeRateType(str, Enum): + """Exchange rate calculation type""" + PAYMENT = "FP" # Use payment date + INVOICE = "FF" # Use invoice date + + +class MovementTypeFilter(str, Enum): + """Movement type filter for definitive imports""" + COMEX = "COMEX" # ProvImpoDefCR = 'P' + IMPDF = "IMPDF" # ProvImpoDefCR != 'P' + ALL = "ALL" # No filter + + +class DischargeFilter(str, Enum): + """Discharge filter for repair imports""" + DISCHARGED = "SiDes" # RepPim.Descarga = 1 + NOT_DISCHARGED = "NoDes" # RepPim.Descarga = 0 + ALL = "ALL" # No filter + + +class ExportMovementType(str, Enum): + """Export movement type filter""" + AFIJO = "AFIJO" # Fixed assets + NODES = "NODES" # No discharge + SCRAP = "SCRAP" # Scrap + REEXP = "REEXP" # Re-export + DONAC = "DONAC" # Donation + VEMEX = "VEMEX" # Sale to Mexico + ALL = "ALL" # All types + + +class AllMovementsFilter(BaseModel): + """Filters for all movements query (all types combined)""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal (grouped by invoice) or Detailed (line by line)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + operation_type: Optional[str] = Field( + default=None, + description="Filter by operation type: 'imp' for imports only, 'exp' for exports only, None for all" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + # Granular movement selection + import_temp: bool = Field(default=True, description="Include temporary imports (IMTEM)") + import_def: bool = Field(default=True, description="Include definitive imports (IMPDF/COMEX)") + import_rep: bool = Field(default=True, description="Include repair imports (IMPRE)") + export_def: bool = Field(default=True, description="Include definitive exports") + export_rep: bool = Field(default=True, description="Include repair exports") + + # Specific filters + export_types: Optional[list[str]] = Field( + default=None, + description="Specific export legacy codes to include (AFIJO, NODES, etc)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Global discharge filter for repair movements" + ) + + +class ImportTemporaryFilter(BaseModel): + """Filters for temporary import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + +class ImportDefinitiveFilter(BaseModel): + """Filters for definitive import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: MovementTypeFilter = Field( + default=MovementTypeFilter.ALL, + description="Movement type filter: COMEX, IMPDF, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + use_transport_method: bool = Field( + default=False, + description="Use MetTrans# = 1 logic for specific pedimento types" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + +class MovementItem(BaseModel): + """Movement item representing a temporary import invoice""" + Factura: Optional[str] = Field(None, description="Invoice number") + Pedimento: Optional[str] = Field(None, description="Pedimento number") + FechaFactura: Optional[datetime] = Field(None, description="Invoice date") + Estatus: Optional[str] = Field(None, description="Status (AC=Active, etc)") + ClavePed: Optional[str] = Field(None, description="Pedimento code") + TipoMovTemDef: Optional[str] = Field(None, description="Movement type (IMTEM=Temporary Import)") + EsCambioRegimen: Optional[str] = Field(None, description="Is regime change (S/N)") + ValorMPTemp: Optional[float] = Field(None, description="Temporary raw material value") + ValorComercialMN: Optional[float] = Field(None, description="Commercial value in MN") + TipoCambio: Optional[float] = Field(None, description="Exchange rate used") + ValorAgre: Optional[float] = Field(default=0.0, description="Aggregate value") + TipoExpo: Optional[str] = Field(default='', description="Export type") + PedimentoR1: Optional[str] = Field(None, description="Rectification pedimento") + EDocument: Optional[str] = Field(None, description="Electronic document") + NumOperacionVU: Optional[str] = Field(None, description="VU operation number") + BaseDeDatos: Optional[str] = Field(None, description="Source database name") + NumGafUni: Optional[str] = Field(None, description="Unique badge number (driver)") + UsuarioCap: Optional[str] = Field(None, description="Capture user") + UsuarioAcr: Optional[str] = Field(None, description="Update user") + Fecha_Pago: Optional[datetime] = Field(None, description="Payment date") + NumCaja: Optional[str] = Field(None, description="Box/Container number") + Pedimento18: Optional[str] = Field(None, description="18-digit pedimento") + AduanaCru: Optional[str] = Field(None, description="Crossing customs") + Lote: Optional[str] = Field(None, description="Lot number") + + model_config = { + "json_schema_extra": { + "example": { + "Factura": "F-2024-001", + "Pedimento": "24 47 3807 8001234", + "FechaFactura": "2024-01-15T00:00:00", + "Estatus": "AC", + "ClavePed": "IM", + "TipoMovTemDef": "IMTEM", + "ValorMPTemp": 10000.50, + "TipoCambio": 17.25 + } + } + } + + +class ImportRepairFilter(BaseModel): + """Filters for repair import movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus != 'AC')" + ) + provider: Optional[str] = Field( + default=None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + default=None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + default=None, + description="Filter by pedimento code (ClavePed)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Discharge filter: SiDes (discharged), NoDes (not discharged), or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Report type: Normal or Detailed" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type for value calculations" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate calculation method" + ) + is_shelter: bool = Field( + default=False, + description="Use shelter company logic" + ) + use_transport_method: bool = Field( + default=False, + description="Use MetTrans# = 1 logic for specific pedimento types" + ) + database_name: str = Field( + ..., + description="Legacy database name to query from" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + +class MovementItemDetailed(BaseModel): + """Detailed movement item with all line-level information""" + Linea: Optional[int] = Field(None, description="Line number") + Factura: Optional[str] = Field(None, description="Invoice number") + Pedimento: Optional[str] = Field(None, description="Pedimento number") + FechaFactura: Optional[datetime] = Field(None, description="Invoice date") + Estatus: Optional[str] = Field(None, description="Status (AC=Active, etc)") + ClavePed: Optional[str] = Field(None, description="Pedimento code") + TipoMovTemDef: Optional[str] = Field(None, description="Movement type") + EsCambioRegimen: Optional[str] = Field(None, description="Is regime change (S/N)") + Regimen: Optional[str] = Field(None, description="Regime") + Fecha_Inicio: Optional[datetime] = Field(None, description="Start date") + Fecha_Fin: Optional[datetime] = Field(None, description="End date") + Fecha_Pago: Optional[datetime] = Field(None, description="Payment date") + Remesa: Optional[str] = Field(None, description="Remesa") + + # Provider information + Proveedor: Optional[str] = Field(None, description="Provider name") + RFCProveedor: Optional[str] = Field(None, description="Provider RFC") + ProveedorTaxID: Optional[str] = Field(None, description="Provider Tax ID") + + # Buyer information + VendidoA: Optional[str] = Field(None, description="Buyer name") + VendidoARFC: Optional[str] = Field(None, description="Buyer RFC") + VendidoATaxID: Optional[str] = Field(None, description="Buyer Tax ID") + + # Customs broker + AgenteAduanal: Optional[str] = Field(None, description="Customs broker name") + Patente: Optional[str] = Field(None, description="Customs broker patent") + + # Item details + NumParte: Optional[str] = Field(None, description="Part number") + DescripcionE: Optional[str] = Field(None, description="Spanish description") + DescripcionI: Optional[str] = Field(None, description="English description") + CantidadIE: Optional[float] = Field(None, description="Quantity") + UniMed: Optional[str] = Field(None, description="Unit of measure") + ValorComercialMN: Optional[float] = Field(None, description="Commercial value in MN") + TipoCambio: Optional[float] = Field(None, description="Exchange rate") + PesoNeto: Optional[float] = Field(None, description="Net weight") + PesoBruto: Optional[float] = Field(None, description="Gross weight") + + # Additional fields + OrdenCompraVenta: Optional[str] = Field(None, description="Purchase order") + FraccionArancelaria: Optional[str] = Field(None, description="Tariff fraction") + Preferencia: Optional[str] = Field(None, description="Preference") + Sector: Optional[str] = Field(None, description="Sector") + PaisOrigen: Optional[str] = Field(None, description="Country of origin") + Aduana: Optional[str] = Field(None, description="Customs office") + Advalorem: Optional[str] = Field(None, description="Ad valorem") + TipoExpo: Optional[str] = Field(default='', description="Export type") + PedimentoR1: Optional[str] = Field(None, description="Rectification pedimento") + EDocument: Optional[str] = Field(None, description="Electronic document") + NumOperacionVU: Optional[str] = Field(None, description="VU operation number") + + # Series information + Series: Optional[str] = Field(None, description="Serial numbers") + Marca: Optional[str] = Field(None, description="Brand") + Modelo: Optional[str] = Field(None, description="Model") + FraccionAmericana: Optional[str] = Field(None, description="American tariff fraction") + ECCN: Optional[str] = Field(None, description="ECCN code") + SimboloEx: Optional[str] = Field(None, description="Export symbol/license") + FechaEmision: Optional[datetime] = Field(None, description="Emission date") + + # Metadata + BaseDeDatos: Optional[str] = Field(None, description="Source database") + NumGafUni: Optional[str] = Field(None, description="Unique badge number") + UsuarioCap: Optional[str] = Field(None, description="Capture user") + UsuarioAcr: Optional[str] = Field(None, description="Update user") + Transportista: Optional[str] = Field(None, description="Transporter") + NumCaja: Optional[str] = Field(None, description="Box number") + Pedimento18: Optional[str] = Field(None, description="18-digit pedimento") + AduanaCru: Optional[str] = Field(None, description="Crossing customs") + Lote: Optional[str] = Field(None, description="Lot number") + + model_config = { + "json_schema_extra": { + "example": { + "Linea": 1 + } + } + } + + +class ExportFilter(BaseModel): + """Filters for export movements query""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus = 'NA')" + ) + provider: Optional[str] = Field( + None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: ExportMovementType = Field( + default=ExportMovementType.ALL, + description="Filter by export movement type (AFIJO, NODES, SCRAP, REEXP, DONAC, VEMEX)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Filter by discharge status: SiDes, NoDes, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Normal (grouped by invoice) or Detallado (line by line)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type: ME (foreign) or MN (local)" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate type: FP (payment date) or FF (invoice date)" + ) + is_shelter: bool = Field( + default=False, + description="Shelter company flag" + ) + use_transport_method: bool = Field( + default=False, + description="Use transport method for exchange rate logic" + ) + database_name: str = Field( + ..., + description="Legacy database name" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + model_config = { + "json_schema_extra": { + "example": { + "range_type": "FF", + "start_date": "20240101", + "end_date": "20240131", + "include_cancelled": False, + "provider": None, + "buyer": None, + "pedimento_code": None, + "movement_type": "ALL", + "discharge_filter": "ALL", + "report_type": "Normal", + "currency_type": "ME", + "exchange_rate_type": "FP", + "is_shelter": False, + "use_transport_method": False, + "database_name": "MYDB" + } + } + } + +class ExportRepairFilter(BaseModel): + """Filters for export repair movements query (EXPO REP)""" + range_type: RangeType = Field( + default=RangeType.INVOICE_DATE, + description="Date range type: FF for invoice date, FP for payment date" + ) + start_date: str = Field( + ..., + description="Start date in YYYYMMDD format or ISO format" + ) + end_date: str = Field( + ..., + description="End date in YYYYMMDD format or ISO format" + ) + include_cancelled: bool = Field( + default=False, + description="Include cancelled invoices (Estatus = 'NA')" + ) + provider: Optional[str] = Field( + None, + description="Filter by provider code" + ) + buyer: Optional[str] = Field( + None, + description="Filter by buyer code (VendidoA)" + ) + pedimento_code: Optional[str] = Field( + None, + description="Filter by pedimento code (ClavePed)" + ) + movement_type: ExportMovementType = Field( + default=ExportMovementType.ALL, + description="Filter by movement type (AFIJO, NODES for repair exports)" + ) + discharge_filter: DischargeFilter = Field( + default=DischargeFilter.ALL, + description="Filter by discharge status: SiDes, NoDes, or ALL" + ) + report_type: ReportType = Field( + default=ReportType.NORMAL, + description="Normal (grouped by invoice) or Detallado (line by line)" + ) + currency_type: CurrencyType = Field( + default=CurrencyType.FOREIGN, + description="Currency type: ME (foreign) or MN (local)" + ) + exchange_rate_type: ExchangeRateType = Field( + default=ExchangeRateType.PAYMENT, + description="Exchange rate type: FP (payment date) or FF (invoice date)" + ) + is_shelter: bool = Field( + default=False, + description="Shelter company flag" + ) + database_name: str = Field( + ..., + description="Legacy database name" + ) + send_email: bool = Field( + default=False, + description="Send report via email to current user" + ) + + model_config = { + "json_schema_extra": { + "example": { + "range_type": "FF", + "start_date": "20240101", + "end_date": "20240131", + "include_cancelled": False, + "provider": None, + "buyer": None, + "pedimento_code": None, + "movement_type": "ALL", + "discharge_filter": "ALL", + "report_type": "Normal", + "currency_type": "ME", + "exchange_rate_type": "FP", + "is_shelter": False, + "database_name": "MYDB" + } + } + } \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services.py b/backend/api/v1/modules/a76/reports/movements/invoices/services.py new file mode 100644 index 00000000..f218bd71 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services.py @@ -0,0 +1,112 @@ +""" +Unified service for invoice movement operations. +This service delegates to specialized handlers for each import type. +""" + +import logging +from sqlalchemy.orm import Session +from typing import List + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + ExportFilter, + MovementItem, + MovementItemDetailed +) +from .services.temporary import TemporaryImportService +from .services.definitive import DefinitiveImportService +from .services.repair import RepairImportService +from .services.export import ExportService + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Unified service for handling all types of movements. + Delegates to specialized services for each movement type. + """ + + def __init__(self): + self.temporary_service = TemporaryImportService() + self.definitive_service = DefinitiveImportService() + self.repair_service = RepairImportService() + self.export_service = ExportService() + + # ===== TEMPORARY IMPORTS ===== + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """Get temporary import movements (normal mode - grouped by invoice).""" + return self.temporary_service.get_movements(db, filters) + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """Get temporary import movements (detailed mode - line by line).""" + return self.temporary_service.get_movements_detailed(db, filters) + + # ===== DEFINITIVE IMPORTS ===== + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """Get definitive import movements (normal mode - grouped by invoice).""" + return self.definitive_service.get_movements(db, filters) + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """Get definitive import movements (detailed mode - line by line).""" + return self.definitive_service.get_movements_detailed(db, filters) + + # ===== REPAIR IMPORTS ===== + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """Get repair import movements (normal mode - grouped by invoice).""" + return self.repair_service.get_movements(db, filters) + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """Get repair import movements (detailed mode - line by line).""" + return self.repair_service.get_movements_detailed(db, filters) + + # ===== EXPORTS ===== + + def get_export_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """Get export movements (normal mode - grouped by invoice).""" + return self.export_service.get_movements(db, filters) + + def get_export_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """Get export movements (detailed mode - line by line).""" + return self.export_service.get_movements_detailed(db, filters) + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py new file mode 100644 index 00000000..fdde7fed --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/__init__.py @@ -0,0 +1,26 @@ +""" +Invoice Movement Services Module + +This package contains the business logic for handling different types of movements: +- Temporary imports (IMTEM) +- Definitive imports (COMEX/IMPDF) +- Repair imports (IMPRE) +- Exports (EXPO DEF) +- Export repairs (EXPO REP) + +The services are organized into specialized modules for better maintainability. +""" + +from .temporary import TemporaryImportService +from .definitive import DefinitiveImportService +from .repair import RepairImportService +from .export import ExportService +from .export_repair import ExportRepairService + +__all__ = [ + 'TemporaryImportService', + 'DefinitiveImportService', + 'RepairImportService', + 'ExportService', + 'ExportRepairService', +] diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py new file mode 100644 index 00000000..e04262a8 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/base.py @@ -0,0 +1,85 @@ +""" +Base utilities and configuration helpers for invoice movement services. +""" + +import logging +import configparser +from typing import Optional + +logger = logging.getLogger(__name__) + + +class ConfigHelper: + """Helper for reading configuration files.""" + + @staticmethod + def get_met_trans_config() -> int: + """ + Read MetTrans configuration from Scaii.ini file. + + Returns: + MetTrans value (0 or 1) + """ + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + return met_trans + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + return 0 + + +class StringHelper: + """Helper for string manipulation.""" + + @staticmethod + def remove_commas(text: Optional[str]) -> Optional[str]: + """Remove commas from text for CSV compatibility.""" + if not text: + return text + return text.replace(',', '') + + @staticmethod + def clean_text(text: Optional[str]) -> Optional[str]: + """Clean text by stripping whitespace and removing special characters.""" + if not text: + return None + # Remove special characters and extra whitespace + cleaned = text.strip() + return cleaned if cleaned else None + + +class DateHelper: + """Helper for date-related operations.""" + + @staticmethod + def get_fecha_tipo_cambio( + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + use_transport_method: bool, + met_trans: int + ): + """ + Determine which date to use for exchange rate lookup based on MetTrans logic. + + Args: + fecha_pago: Payment date + fecha_inicio: Start/entry date + tipo_pedimento: Pedimento type code + use_transport_method: Whether to apply transport method logic + met_trans: MetTrans configuration value + + Returns: + Date to use for exchange rate lookup + """ + fecha = fecha_pago + + # MetTrans# = 1 logic: use fecha_inicio for specific pedimento types + if use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha = fecha_inicio + + return fecha diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py new file mode 100644 index 00000000..e6ab3db8 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/database_helpers.py @@ -0,0 +1,520 @@ +""" +Database query helpers for invoice movements. +""" + +import logging +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import Optional, Dict + +logger = logging.getLogger(__name__) + + +class DatabaseHelper: + """Helper for common database operations.""" + + @staticmethod + def get_database_name(db: Session) -> Optional[str]: + """ + Get the current database name from the session. + + Returns: + Database name or None if not found + """ + try: + result = db.execute(text("SELECT current_database()")).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error getting database name: {e}") + return None + + @staticmethod + def get_exchange_rate( + db: Session, + db_name: str, + fecha, + is_shelter: bool = False, + raise_on_missing: bool = False, + pedimento_number: Optional[str] = None + ) -> Optional[float]: + """ + Get exchange rate for the given date from exchange_rate table. + + Args: + db: Database session + db_name: Legacy database name (kept for compatibility, not used) + fecha: Date for exchange rate lookup + is_shelter: Shelter company flag (when True and rate not found, raises detailed error) + raise_on_missing: If True, raises ValueError when rate not found + pedimento_number: Pedimento number for error messages + + Returns: + Exchange rate as float, or None if not found + + Raises: + ValueError: When is_shelter=True and exchange rate not found + """ + if not fecha: + return None + + try: + # TODO: Verify exchange_rate table structure and column names + sql_tc = text(""" + SELECT rate + FROM a76.exchange_rate + WHERE rate_date = :fecha + ORDER BY rate_date DESC + LIMIT 1 + """) + res = db.execute(sql_tc, {"fecha": fecha}).fetchone() + if res and res[0]: + return float(res[0]) + else: + # Clarion logic: For Shelter operations with FP, missing exchange rate is an error + if is_shelter and raise_on_missing: + fecha_str = fecha.strftime('%d/%m/%Y') if hasattr(fecha, 'strftime') else str(fecha) + ped_info = f" del Pedimento: {pedimento_number}" if pedimento_number else "" + raise ValueError( + f"Falta el tipo de cambio del día {fecha_str}. " + f"Por favor regístralo en el catálogo de Tipos de Cambio." + ) + logger.warning(f"Exchange rate not found for date {fecha}") + return None + except ValueError: + raise # Re-raise validation errors + except Exception as e: + logger.error(f"Error fetching exchange rate for date {fecha}: {e}") + return None + + @staticmethod + def get_client_info( + db: Session, + db_name: str, + client_code: str, + is_supplier: bool = True + ) -> Dict[str, Optional[str]]: + """ + Get client or supplier information (name, RFC, TaxID). + + Args: + db: Database session + db_name: Database name (kept for compatibility, not used) + client_code: Client/supplier code + is_supplier: True for suppliers, False for clients + + Returns: + Dict with 'name', 'rfc', 'tax_id' keys + """ + if not client_code: + return {"name": None, "rfc": None, "tax_id": None} + + client_type = 'PROVIDER' if is_supplier else 'CLIENT' + + try: + sql = text(""" + SELECT cp.name, cp.rfc, cpp.tax_id + FROM a76.clients_and_providers cp + LEFT JOIN a76.clients_and_providers_programs cpp ON cpp.client_id = cp.id + WHERE cp.id = :client_code AND cp.client_or_provider = :client_type + """) + result = db.execute(sql, {"client_code": client_code, "client_type": client_type}).fetchone() + + if result: + return { + "name": result[0], + "rfc": result[1], + "tax_id": result[2] + } + else: + logger.debug(f"Client {client_code} not found as {client_type}") + return {"name": None, "rfc": None, "tax_id": None} + except Exception as e: + logger.error(f"Error fetching client info for {client_code}: {e}") + raise + + @staticmethod + def get_customs_agent_info( + db: Session, + db_name: str, + agent_code: str + ) -> Dict[str, Optional[str]]: + """ + Get customs agent information (name, license). + + Args: + db: Database session + db_name: Database name (kept for compatibility, not used) + agent_code: Customs agent code + + Returns: + Dict with 'name', 'license' keys + """ + if not agent_code: + return {"name": None, "license": None} + + try: + sql = text(""" + SELECT name, license + FROM a76.customs_brokers + WHERE id = :agent_code + LIMIT 1 + """) + result = db.execute(sql, {"agent_code": agent_code}).fetchone() + + if result: + return { + "name": result[0], + "license": result[1] + } + else: + logger.debug(f"Customs agent {agent_code} not found") + return {"name": None, "license": None} + except Exception as e: + logger.error(f"Error fetching customs agent info for {agent_code}: {e}") + raise + + @staticmethod + def get_aduana_seccion_nombre( + db: Session, + db_name: str, + aduana_seccion: str + ) -> Optional[str]: + """ + Get customs section name. + + Args: + db: Database session + db_name: Database name + aduana_seccion: Customs section code + + Returns: + Customs section name or None + """ + if not aduana_seccion: + return None + + try: + query = text(""" + SELECT section_name + FROM public.customs_sections + WHERE customs_code = :code + """) + result = db.execute(query, {"code": aduana_seccion}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching customs section name: {e}") + raise + + @staticmethod + def get_series_info( + db: Session, + db_name: str, + invoice_id: int, + linea: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for import items. + + Args: + db: Database session + db_name: Legacy database name (not used in PostgreSQL) + invoice_id: Invoice header ID + linea: Line number + is_shelter: Shelter flag (not used) + + Returns: + Formatted series string or None + """ + if not invoice_id or not linea: + return None + + try: + query = text(""" + SELECT serial_numbers, model, brand + FROM a76.item_line_series ils + INNER JOIN a76.item_lines il ON ils.line_item_id = il.id + WHERE il.invoice_id = :invoice_id + AND il.line_number = :linea + ORDER BY ils.id + LIMIT 1 + """) + result = db.execute(query, { + "invoice_id": invoice_id, + "linea": linea + }).fetchone() + + if result: + serial_numbers, model, brand = result + parts = [] + if serial_numbers: + parts.append(serial_numbers) + if model: + parts.append(model) + if brand: + parts.append(brand) + return " / ".join(parts) if parts else None + return None + except Exception as e: + logger.error(f"Error fetching series info: {e}") + raise + + @staticmethod + def get_series_info_export( + db: Session, + db_name: str, + invoice_id: int, + linea: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for export items. + + Args: + db: Database session + db_name: Legacy database name + invoice_id: Invoice header ID + linea: LineaExpo value + is_shelter: Shelter flag + + Returns: + Formatted series string or None + """ + if not invoice_id or not linea: + return None + + try: + # Note: Postgres items table calls it expo_brad (typo in DB schema) + # ItemLineSeries FK is line_item_id, not item_line_id + query = text(""" + SELECT serial_numbers, model, expo_brad + FROM a76.item_line_series ils + INNER JOIN a76.item_lines il ON ils.line_item_id = il.id + WHERE il.invoice_id = :invoice_id + AND il.line_number = :linea + ORDER BY ils.id + LIMIT 1 + """) + result = db.execute(query, { + "invoice_id": invoice_id, + "linea": linea + }).fetchone() + + if result: + serial_numbers, model, expo_brand = result + parts = [] + if serial_numbers: + parts.append(serial_numbers) + if model: + parts.append(model) + if expo_brand: + parts.append(expo_brand) + return " | ".join(parts) if parts else None + return None + except Exception as e: + logger.error(f"Error fetching export series info: {e}") + raise + + @staticmethod + def get_rectification_pedimento( + db: Session, + pedimento: str, + ped_rectifica: Optional[str], + is_shelter: bool = False + ) -> Optional[str]: + """ + Get final pedimento rectification number following the chain recursively. + + Clarion logic: + - IF Loc:OpcionShelter = 1 THEN: use direct field value (PedRectifica) + - ELSE: call BuscarRectificacion() - follows rectification chain recursively + + BuscarRectificacion follows the chain: + Example: A1 -> A2 -> A3 -> A4 (returns A4, the final rectification) + + Args: + db: Database session + pedimento: Original pedimento number + ped_rectifica: Initial rectification pedimento from database field + (already resolved from pedimento_rectification_origin JOIN in query) + is_shelter: Shelter company flag + + Returns: + Final rectification pedimento number in the chain, or None/empty if no rectification + """ + if is_shelter: + # Shelter: use direct value from PedRectifica field + result = ped_rectifica + else: + # Non-Shelter: implement BuscarRectificacion logic + result = DatabaseHelper._buscar_rectificacion(db, pedimento, ped_rectifica) + return result + + @staticmethod + def _buscar_rectificacion( + db: Session, + pedimento_orig: str, + ped_rec: Optional[str] + ) -> Optional[str]: + """ + BUSCA ULTIMO PEDIMENTO DE RECTIFICACION + Returns the rectification origin pedimento string already resolved by the query + builder's JOIN on pedimento_rectification_origin. + + Args: + db: Database session + pedimento_orig: Original pedimento number (e.g. "1234567") + ped_rec: Rectification pedimento origin string already computed by the SQL JOIN + (e.g. "25-470-8000-1234567") + + Returns: + The rectification origin string, or empty string if none. + """ + if not ped_rec: + return '' + + # The ped_rec value already comes from the JOIN on pedimento_rectification_origin + # in the query builder, so it is the directly stored origin pedimento. + # Return it directly without any further recursive DB lookup. + return ped_rec + + @staticmethod + def _busca_pedimento_r1( + db: Session, + pedimento: str, + visited: set + ) -> Optional[str]: + """ + BUSCA_PEDIMENTO_R1 ROUTINE - Recursive search for final rectification pedimento + using pedimento_rectification_origin table. + + Args: + db: Database session + pedimento: Current pedimento number to check + visited: Set of already visited pedimentos (prevents infinite loops) + + Returns: + Final pedimento in chain, or None if circular reference detected + """ + if pedimento in visited: + # Circular reference detected (ERRORCODE = 30 equivalent) + logger.warning(f"Circular reference detected in rectification chain: {pedimento}") + return None + + try: + # Query pedimento_rectification_origin for the next pedimento in the chain. + # NOTE: The a76.pedimentos table does NOT have a ped_rectifica column. + # Rectification data lives in pedimento_rectification_origin. + sql = text(""" + SELECT + pro.original_pedimento_year || '-' || pro.original_customs_office || + '-' || pro.original_license || '-' || pro.original_pedimento_number AS ped_origen + FROM a76.pedimento_rectification_origin pro + INNER JOIN a76.pedimentos ped ON ped.id = pro.pedimento_id + WHERE ped.pedimento_number = :pedimento + AND pro.deleted_at IS NULL + LIMIT 1 + """) + result = db.execute(sql, {"pedimento": pedimento}).fetchone() + + if result and result[0] and result[0].replace('-', '').strip(): + ped_rectifica_next = result[0] + + # Add current pedimento to visited set + visited.add(pedimento) + + # Recurse with next rectification origin + final_ped = DatabaseHelper._busca_pedimento_r1( + db, ped_rectifica_next, visited + ) + + return final_ped if final_ped else pedimento + else: + # No more rectifications, this is the final pedimento + return pedimento + + except Exception as e: + logger.error(f"Error fetching rectification origin for pedimento {pedimento}: {e}") + return None + + @staticmethod + def get_driver_badge( + db: Session, + db_name: str, + factura: str + ) -> Optional[str]: + """ + Get driver unique badge number (NUMGAFETEUNICO) for invoice. + + Clarion query: + SELECT NUMGAFETEUNICO FROM GConductor + LEFT JOIN QFacImp ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = '' + + Modern schema: + - invoice_header has invoice_number + - invoice_logistics links to invoice via invoice_id and has driver_name + - driver table has unique_badge_number and driver_name + + Args: + db: Database session + db_name: Database name (not used in modern schema) + factura: Invoice number + + Returns: + Driver unique badge number or None + """ + if not factura: + return None + + try: + # Join invoice_header -> invoice_logistics -> driver via driver_name + query = text(""" + SELECT d.unique_badge_number + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.driver d ON d.driver_name = log.driver_name + WHERE ih.invoice_number = :factura + AND d.unique_badge_number IS NOT NULL + LIMIT 1 + """) + result = db.execute(query, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching driver badge for invoice {factura}: {e}") + raise + + @staticmethod + def get_part_export_symbol( + db: Session, + db_name: str, + num_parte: str, + is_shelter: bool + ) -> Optional[str]: + """ + Get export symbol/license for a part number. + + Args: + db: Database session + db_name: Database name (not used in PostgreSQL, kept for compatibility) + num_parte: Part number + is_shelter: Shelter flag (not used, kept for compatibility) + + Returns: + Export symbol/license or None + """ + if not num_parte: + return None + + try: + query = text(""" + SELECT exclusion_symbol + FROM a76.parts + WHERE part_number = :num_parte + LIMIT 1 + """) + result = db.execute(query, {"num_parte": num_parte}).fetchone() + return result[0] if result else None + except Exception as e: + logger.error(f"Error fetching export symbol for part {num_parte}: {e}") + raise diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py new file mode 100644 index 00000000..dd710d24 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/definitive.py @@ -0,0 +1,383 @@ +""" +Definitive import service - handles COMEX/IMPDF movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportDefinitiveFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import DefinitiveImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class DefinitiveImportService: + """Service for handling definitive import movements (COMEX/IMPDF).""" + + def get_movements( + self, + db: Session, + filters: "ImportDefinitiveFilter" + ) -> List["MovementItem"]: + """ + Get definitive import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching definitive import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(DefinitiveImportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} definitive import invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaImpoDef + estatus = row[3] # C4 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + invoice_id = row[16] # C35 - invoice ID + + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = to_float(row[28]) # total_me from SUM aggregation + total_mn = to_float(row[29]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[30]) + sum_value_mxn = to_float(row[31]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=to_float(row[20]), # C51 - TipoCambio + fecha_pago=row[8], # C13 - Fecha_Pago + fecha_inicio=row[6], # C11 - Fecha_Inicio + tipo_pedimento=row[4], # C5 - ClavePed (Fix: using C5 instead of empty C59) + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpoDef + row[17], # C42 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoImpoDef + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMPDF', + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C43 - EDocument + NumOperacionVU=row[19], # C44 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C53 - UsuarioCap + UsuarioAcr=row[23], # C54 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[8]), # C13 - Fecha_Pago + NumCaja=row[24], # C56 - Transporte + NumTrasporte + Pedimento18=row[25], # C57 - empty (index 25) + AduanaCru=row[15], # C39 - Aduana_Cruce + Lote=row[26] # C58 - empty (index 26) + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching definitive import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportDefinitiveFilter" + ) -> List["MovementItemDetailed"]: + """ + Get definitive import movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed definitive import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute main query + sql = text(DefinitiveImportQueries.build_main_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed definitive import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + continue + + # Get additional detailed information + # Provider and client names now come directly from query (row[7], row[8]) + # But we still need RFC and TaxID from the helper + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[17] + ) + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[38] + ) + + # Calculate values using unified method + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=row[26], # C27 - ValorImpoME + valor_mn_direct=row[24], # C25 - ValorImpoMN + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C1 entry_date + clave_ped=row[57] if len(row) > 57 else '', # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + if row[39] == 'P': # C40 - EsSubPartida + peso_neto = float(row[28]) if row[28] else 0.0 # C29 + peso_bruto = float(row[29]) if row[29] else 0.0 # C30 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[38], row[43], filters.is_shelter # C39, C44 + ) + + simbolo_ex = None + if row[48]: # C49 - Part Number + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[48], filters.is_shelter + ) + + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, row[1], row[40], filters.is_shelter # C2, C41 + ) + + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[0] # C1 + ) + + movement = MovementItemDetailed( + Linea=row[43], # C44 + Factura=row[0], # C1 + Pedimento=row[1], # C2 + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef='IMPDF', + EsCambioRegimen='N', + Regimen=row[9], # C10 + Fecha_Inicio=parse_yyyymmdd_date(row[10]), # C11 + Fecha_Fin=parse_yyyymmdd_date(row[11]), # C12 + Fecha_Pago=parse_yyyymmdd_date(row[12]), # C13 + Remesa=str(row[13]) if row[13] is not None else None, # C14 + Proveedor=row[7], # C8 - Provider name (from JOIN) + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=row[8], # C9 - Client name (from JOIN) + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[48], # C49 + DescripcionE=StringHelper.clean_text(row[20]), # C21 + DescripcionI=StringHelper.clean_text(row[21]), # C22 + CantidadIE=float(row[22]) if row[22] else 0.0, # C23 + UniMed=row[23], # C24 + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[30], # C31 + FraccionArancelaria=row[31], # C32 + Preferencia=row[32], # C33 + Sector=row[34], # C35 + PaisOrigen=row[36], # C37 + Aduana=aduana_nombre, + Advalorem='P' if row[39] == 'P' else 'S', # C40 + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[41], # C42 + NumOperacionVU=row[42], # C43 + Series=series_info, + Marca=StringHelper.clean_text(row[44]), # C45 + Modelo=StringHelper.clean_text(row[45]), # C46 + FraccionAmericana=row[46], # C47 + ECCN=row[47], # C48 + SimboloEx=simbolo_ex, + FechaEmision=parse_yyyymmdd_date(row[50]) if row[50] else None, # C51 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[51], # C52 + UsuarioAcr=row[52], # C53 + Transportista=row[53], # C54 + NumCaja=row[54], # C55 + Pedimento18=row[55] if len(row) > 55 else '', # C56 + AduanaCru=row[37], # C38 + Lote=row[56] if len(row) > 56 else '' # C57 + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed definitive import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportDefinitiveFilter") -> str: + """Build WHERE clause for definitive imports query.""" + where_conditions = [] + + # STRICT SEPARATION: Only imports + where_conditions.append("ih.operation_type = 'imp'") + + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + # ALWAYS filter by specific invoice_type to avoid duplication with Temporary service + where_conditions.append("ih.invoice_type IN ('DEF', 'MATDE', 'EXDEF')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """Calculate totals for main partidas only. + + Only sums partidas where is_subpartida is false (equivalent to EsSubpartida = 'P' in Clarion). + """ + sql = text(""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + WHERE il.invoice_id = :consecutivo + AND COALESCE(il.is_subpartida, false) = false + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py new file mode 100644 index 00000000..5c9f2010 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/exchange_rate.py @@ -0,0 +1,193 @@ +""" +Exchange rate calculation logic for invoice movements. +""" + +import logging +from sqlalchemy.orm import Session +from typing import Tuple, Optional +from .base import DateHelper +from .database_helpers import DatabaseHelper + +logger = logging.getLogger(__name__) + + +class ExchangeRateCalculator: + """Handles exchange rate calculations and commercial value conversions.""" + + @staticmethod + def calculate_exchange_rate_and_value( + db: Session, + db_name: str, + es_subpartida: str, + valor_me: Optional[float], + valor_mn_direct: Optional[float], + fecha_pago, + fecha_inicio, + clave_ped: str, + tipo_cambio_partida: Optional[float], + currency_type: str, + exchange_rate_type: str, + met_trans: int + ) -> Tuple[float, Optional[float]]: + """ + Unified method to calculate exchange rate and commercial value. + Eliminates duplicated logic across all import types. + + Args: + db: Database session + db_name: Database name + es_subpartida: Subpartida flag ('P' for partida, 'S' for subpartida) + valor_me: Value in foreign currency (ME) + valor_mn_direct: Direct value in local currency (MN) + fecha_pago: Payment date + fecha_inicio: Start/entry date + clave_ped: Pedimento type code + tipo_cambio_partida: Exchange rate from partida record + currency_type: "ME" or "MN" + exchange_rate_type: "FP" (payment date) or "FT" (transaction date) + met_trans: MetTrans configuration value + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio_final) + """ + # Handle subpartidas - always return zero + if es_subpartida == 'S': + return (0.0, None) + + # Handle foreign currency (ME) case + if currency_type == "ME": + valor_comercial = valor_me or 0.0 + tipo_cambio_final = tipo_cambio_partida + + # Try to get exchange rate from GTipoCambio if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=clave_ped, + use_transport_method=True, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) + if tc_value: + tipo_cambio_final = tc_value + + # For ME, the value is always in foreign currency (USD) + return (valor_comercial, tipo_cambio_final) + + # Handle local currency (MN) case + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=clave_ped, + use_transport_method=True, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate(db, db_name, fecha_tc) + + if tc_value and valor_me is not None: + # Calculate MN value from ME * payment date exchange rate + return (valor_me * tc_value, tc_value) + else: + if tc_value is None: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using partida values") + return (valor_mn_direct or 0.0, tipo_cambio_partida) + else: + # exchange_rate_type == "FT" (Invoice Date) + # Use direct MN value and partida exchange rate + return (valor_mn_direct or 0.0, tipo_cambio_partida) + + @staticmethod + def calculate_for_aggregated( + db: Session, + db_name: str, + valor_me: float, + valor_mn: float, + tipo_cambio_db: float, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + currency_type: str, + exchange_rate_type: str, + is_shelter: bool, + use_transport_method: bool, + met_trans: int + ) -> Tuple[float, Optional[float]]: + """ + Calculate exchange rate and value for aggregated (normal mode) movements. + + This method is used when movements are grouped by invoice rather than + showing individual partidas. + + Args: + db: Database session + db_name: Database name + valor_me: Aggregated value in foreign currency + valor_mn: Aggregated value in local currency + tipo_cambio_db: Exchange rate from database + fecha_pago: Payment date + fecha_inicio: Start date + tipo_pedimento: Pedimento type + currency_type: "ME" or "MN" + exchange_rate_type: "FP" or "FT" + is_shelter: Shelter company flag (kept for compatibility) + use_transport_method: Use transport method flag + met_trans: MetTrans value from config + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio) + """ + # Foreign currency case + if currency_type == "ME": + valor_comercial = valor_me + tipo_cambio = tipo_cambio_db + + # Try to get exchange rate if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + use_transport_method=use_transport_method, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate( + db, db_name, fecha_tc, + is_shelter=is_shelter, + raise_on_missing=is_shelter + ) + + if tc_value: + # For ME, the value is always in foreign currency (USD). Just return the new exchange rate. + return (valor_comercial, tc_value) + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + + return (valor_comercial, tipo_cambio) + + # Local currency case + else: + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = DateHelper.get_fecha_tipo_cambio( + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + use_transport_method=use_transport_method, + met_trans=met_trans + ) + tc_value = DatabaseHelper.get_exchange_rate( + db, db_name, fecha_tc, + is_shelter=is_shelter, + raise_on_missing=is_shelter + ) + + if tc_value and valor_me is not None: + # Calculate MN value from ME * payment date exchange rate + return (valor_me * tc_value, tc_value) + else: + if tc_value is None: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + return (valor_mn, tipo_cambio_db) + else: + return (valor_mn, tipo_cambio_db) diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py new file mode 100644 index 00000000..de65c9db --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export.py @@ -0,0 +1,408 @@ +""" +Export service - handles export movements (EXPO DEF). +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional + +from ..schemas import ExportFilter, MovementItem, MovementItemDetailed +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import ExportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class ExportService: + """Service for handling export movements (EXPO DEF).""" + + def get_movements( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItem]: + """ + Get export movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + try: + logger.info(f"Fetching export movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + # Note: discharge_clause not used in aggregated query for exports + sql = text(ExportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} export invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaExpo + tipo_mov = row[14] # C34 - TipoFactura + + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C6 - Estatus + continue + + consecutivo = row[15] # C35 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + def to_float(val): + if val is None or val == '': return 0.0 + try: return float(val) + except (ValueError, TypeError): return 0.0 + + total_me = to_float(row[23]) # total_me from SUM aggregation + total_mn = to_float(row[24]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[26]) + sum_value_mxn = to_float(row[27]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[18], # C48 - TipoCambio + fecha_pago=row[7], # C11 - Fecha_Pago + fecha_inicio=row[6], # C10 - Fecha_Inicio (mapped previously to C9) + tipo_pedimento='', # Not in aggregated query + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=filters.use_transport_method, + met_trans=met_trans + ) + + # Get pedimento rectification + rectified_pedimento = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[25], # C54 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + driver_badge = self._get_driver_badge(db, filters.database_name, factura) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C6 - Estatus + ClavePed=row[4], # C7 - ClavePed + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=to_float(row[28]), + TipoExpo='EXPO DEF', + PedimentoR1=rectified_pedimento, + EDocument=row[16], # C40 - EDocument + NumOperacionVU=row[17], # C41 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=driver_badge, + UsuarioCap=row[20], # C50 - UsuarioCap + UsuarioAcr=row[21], # C51 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[7]), # C11 - Fecha_Pago + NumCaja=row[22], # C53 - Transporte + NumTrasporte + Pedimento18='', # Not in aggregated query + AduanaCru=row[13], # C33 - Aduana_Cruce + Lote='' # Not in aggregated query + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} export movements") + return movements + + except Exception as e: + logger.error(f"Error fetching export movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: ExportFilter + ) -> List[MovementItemDetailed]: + """ + Get export movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + try: + logger.info(f"Fetching detailed export movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Build discharge filter for main query + discharge_clause = "" + if filters.discharge_filter == "SiDes": + discharge_clause = " AND EqiPex.Descarga = 1" + elif filters.discharge_filter == "NoDes": + discharge_clause = " AND EqiPex.Descarga = 0" + + # Modify main query to include discharge filter + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(ExportQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed export partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus + continue + + # Get client/supplier information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[15] # C16 - AAduanal + ) + + # Get customs section name + customs_name = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[32] # C33 - Aduana_Cruce + ) + + # Calculate exchange rate and value for this partida + valor_mn, tipo_cambio_final = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[37], # C38 - EsSubPartida + valor_me=row[36], # C37 - ValorExpoME + valor_mn_direct=row[35], # C36 - ValorExpoMN + fecha_pago=row[10], # C11 - Fecha_Pago + fecha_inicio=row[8], # C9 - Fecha_Inicio + clave_ped=row[55], # C56 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[47], # C48 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values (material_type is typically 'PT' or 'MP', not just 'P') + peso_neto_final = row[24] if row[37] != 'S' else 0 # C25 - PesoNeto + peso_bruto_final = row[25] if row[37] != 'S' else 0 # C26 - PesoBruto + + # Get series information + series_info = DatabaseHelper.get_series_info_export( + db, filters.database_name, row[34], row[41], filters.is_shelter + ) + + # Get pedimento rectification + rectified_pedimento = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[38], # C39 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + driver_badge = self._get_driver_badge(db, filters.database_name, row[0]) # C1 - FacturaExpo + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[41], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef=row[31], # C34 - TipoFactura + EsCambioRegimen='N', + Regimen=row[5], # C6 - Regime (Shared index with Estatus in this query) + Fecha_Inicio=parse_yyyymmdd_date(row[6]), # C7 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[7]), # C8 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[8]), # C9 - Fecha_Pago + Remesa=row[9], # C12 - Remesa + TipoCambio=tipo_cambio_final, + Proveedor=proveedor_info.get("name"), + RFCProveedor=proveedor_info.get("rfc"), + ProveedorTaxID=proveedor_info.get("tax_id"), + VendidoA=vendido_info.get("name"), + VendidoARFC=vendido_info.get("rfc"), + VendidoATaxID=vendido_info.get("tax_id"), + AgenteAduanal=agente_info.get("name"), + Patente=agente_info.get("license"), + NumParte=row[17], # C18 - NumParte + DescripcionE=StringHelper.remove_commas(row[18]), # C19 - DescripcionE + DescripcionI=StringHelper.remove_commas(row[19]), # C20 - DescripcionI + CantidadIE=row[20], # C21 - CantExpo + UniMed=row[21], # C22 - UnidadMedida + ValorComercialMN=valor_mn, + PesoNeto=peso_neto_final, + PesoBruto=peso_bruto_final, + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen + Aduana=customs_name, + Advalorem=row[29], # C30 - Advalorem + TipoExpo='EXPO DEF', + PedimentoR1=rectified_pedimento, + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU + Series=series_info, + Marca=StringHelper.clean_text(row[42]), # C43 - Marca + Modelo=StringHelper.clean_text(row[43]), # C44 - Modelo + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN + FechaEmision=parse_yyyymmdd_date(row[48]) if row[48] else None, # C49 - FechaEmision + BaseDeDatos=filters.database_name, + NumGafUni=driver_badge, + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Carrier ID (derived from log.transport_id) + NumCaja=row[52], # C53 - log.transport_id || log.transport_num + Pedimento18=row[53], # C54 - empty + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] if len(row) > 54 else '' # C55 - Lote + ) + + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed export movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed export movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: ExportFilter) -> str: + """ + Build WHERE clause for export query. + + IMPORTANT: Returns conditions WITHOUT the WHERE keyword (already in base query) + AC (Active) = is_updated = true + NA (Not Applicable/Deactivated) = is_updated = false + """ + conditions = [] + + # STRICT SEPARATION: Only exports + conditions.append("ih.operation_type = 'exp'") + + # Exclude REP (export reports) + conditions.append("ih.invoice_type NOT IN ('REP')") + + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + if filters.movement_type.value != "ALL": + # Filter by invoice type for exports + conditions.append("ih.invoice_type IN ('EXP', 'EXREP')") + + # CRITICAL VALIDATION: AC/NA status filter + # If include_cancelled is False (checkbox unchecked), only show AC invoices + # AC (Active) = is_updated = true + # NA (Not Applicable/Deactivated) = is_updated = false + if not filters.include_cancelled: + conditions.append("ih.is_updated = true") + logger.debug("Filtering only active invoices (is_updated = true)") + else: + logger.debug("Including cancelled invoices (include_cancelled = true)") + + # Date range + date_field = "ih.invoice_date" if filters.range_type.value == "FF" else "pd.payment_date" + conditions.append(f"{date_field} >= TO_DATE('{filters.start_date}', 'YYYYMMDD')") + conditions.append(f"{date_field} <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Optional filters + if filters.provider: + conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") + if filters.buyer: + conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") + if filters.pedimento_code: + conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(conditions) + + def _build_discharge_clause(self, discharge_filter: str) -> str: + """Build discharge filter clause for totals query.""" + if discharge_filter == "SiDes": + return " AND il.is_discharged = true" + elif discharge_filter == "NoDes": + return " AND il.is_discharged = false" + return "" + + def _calculate_totals( + self, + db: Session, + db_name: str, + consecutivo: int, + discharge_clause: str + ) -> tuple: + """Calculate total values for an export invoice.""" + try: + sql = text(ExportQueries.build_totals_query(db_name, discharge_clause)) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating export totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: + """Get driver's unique badge number for an export invoice.""" + if not factura: + return None + + try: + sql = text(ExportQueries.build_driver_badge_query(db_name)) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for export invoice {factura}: {e}") + return None diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py new file mode 100644 index 00000000..63704ddd --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/export_repair.py @@ -0,0 +1,409 @@ +""" +Export repair service - handles EXPO REP movements (repair exports). +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional + +from ..schemas import ExportRepairFilter, MovementItem, MovementItemDetailed +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import ExportRepairQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class ExportRepairService: + """Service for handling export repair movements (EXPO REP).""" + + def get_movements( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItem]: + """ + Get export repair movements (normal mode - grouped by invoice). + + Aggregated query column order (ExportRepairQueries.build_aggregated_query): + [0] C1 - invoice_number + [1] C2 - pedimento_number + [2] C3 - invoice_date + [3] C6 - estatus (AC/NA) + [4] C7 - pedimento_code + [5] C8 - regime + [6] C11 - payment_date + [7] C12 - remesa + [8] C13 - exchange_rate (fecha_pago context) + [9] C14 - provider_id + [10] C15 - sold_to_id + [11] C16 - customs_broker_id + [12] C27 - purchase_order + [13] C33 - customs_office ← AduanaCru + [14] C34 - document_type ← TipoFactura / tipo_mov + [15] C35 - id ← consecutivo + [16] C40 - edocument ← EDocument + [17] C41 - vucem_op_num ← NumOperacionVU + [18] C48 - exchange_rate ← TipoCambio + [19] C49 - emission_date + [20] C50 - capture_user ← UsuarioCap + [21] C51 - who_updated ← UsuarioAcr + [22] C52 - carrier_id ← Transportista + [23] C53 - transport ← NumCaja + [24] total_me + [25] total_mn + [26] C54 - ped_r1 ← PedimentoR1 + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + try: + logger.info(f"Fetching export repair movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(ExportRepairQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} export repair invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaExpo + tipo_mov = row[14] # C34 - TipoFactura + estatus = row[3] # C6 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[15] # C35 - Consecutivo + + # Totals come directly from GROUP BY query (no N+1 problem) + def to_float(val): + if val is None or val == '': return 0.0 + try: return float(val) + except (ValueError, TypeError): return 0.0 + + total_me = to_float(row[24]) # total_me + total_mn = to_float(row[25]) # total_mn + sum_value_usd = to_float(row[27]) + sum_value_mxn = to_float(row[28]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=row[18], # C48 - TipoCambio + fecha_pago=row[6], # C11 - Fecha_Pago + fecha_inicio='', + tipo_pedimento='', + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification (already resolved by SQL COALESCE) + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[26], # C54 - PedRectifica (pre-built by SQL) + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C6 - Estatus + ClavePed=row[4], # C7 - ClavePed + TipoMovTemDef=tipo_mov, # C34 - TipoFactura + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=to_float(row[29]), + TipoExpo='EXPO REP', + PedimentoR1=pedimento_r1, + EDocument=row[16], # C40 - EDocument ← FIXED (was 17) + NumOperacionVU=row[17], # C41 - NumOperacionVU ← FIXED (was 18) + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[20], # C50 - UsuarioCap ← FIXED (was 21) + UsuarioAcr=row[21], # C51 - UsuarioAct ← FIXED (was 22) + Fecha_Pago=parse_yyyymmdd_date(row[6]), # C11 - Fecha_Pago ← FIXED (was 8) + NumCaja=row[23], # C53 - NumCaja + Pedimento18='', + AduanaCru=row[13], # C33 - customs_office ← FIXED (was 14) + Lote='' + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} export repair movements") + return movements + + except Exception as e: + logger.error(f"Error fetching export repair movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: ExportRepairFilter + ) -> List[MovementItemDetailed]: + """ + Get export repair movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + try: + logger.info(f"Fetching detailed export repair movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Add discharge filter to WHERE clause + discharge_clause = "" + if filters.discharge_filter.value == "SiDes": + discharge_clause = " AND RepPex.Descarga = 1" + elif filters.discharge_filter.value == "NoDes": + discharge_clause = " AND RepPex.Descarga = 0" + + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(ExportRepairQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed export repair partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[5] == 'NA': # C6 - Estatus + continue + + # Get provider information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[13], is_supplier=True # C14 - Proveedor + ) + + # Get buyer information + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[14], is_supplier=False # C15 - VendidoA + ) + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[15] # C16 - AAduanal + ) + + # Get customs section name + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[32] # C33 - Aduana_Cruce + ) + + # Set peso values based on subpartida flag (allow 'PT', 'MP', etc. but block 'S') + if row[37] != 'S': # C38 - EsSubPartida + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_partida( + db=db, + db_name=filters.database_name, + valor_me=row[36], # C37 - ValorExpoME + valor_mn=row[35], # C36 - ValorExpoMN + tipo_cambio_db=row[47], # C48 - TipoCambio + fecha_pago=row[10], # C11 - Fecha_Pago + fecha_inicio=row[8], # C9 - Fecha_Inicio + tipo_pedimento=row[55], # C56 - TIPOPEDIMENTOTRANSPORTEE + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + peso_neto = float(row[24]) if row[24] else 0.0 # C25 + peso_bruto = float(row[25]) if row[25] else 0.0 # C26 + else: # Subpartida + valor_comercial = 0.0 + tipo_cambio = 0.0 + peso_neto = 0.0 + peso_bruto = 0.0 + + # Get series information + series_info = DatabaseHelper.get_series_info_export( + db, filters.database_name, row[34], row[41], filters.is_shelter # C35, C42 + ) + + # Get part export symbol + simbolo_ex = None + if row[46]: # C47 - NumParte + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[46], filters.is_shelter + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoExpo + row[38], # C39 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, row[0]) + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[41], # C42 - LineaExpo + Factura=row[0], # C1 - FacturaExpo + Pedimento=row[1], # C2 - PedimentoExpo + FechaFactura=row[2], # C3 - FechaFactura + Estatus=row[5], # C6 - Estatus + ClavePed=row[6], # C7 - ClavePed + TipoMovTemDef=row[33], # C34 - TipoFactura + EsCambioRegimen='N', + Regimen=row[7], # C8 - Regimen + Fecha_Inicio=parse_yyyymmdd_date(row[8]), # C9 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[9]), # C10 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[10]), # C11 - Fecha_Pago + Remesa=row[11], # C12 - Remesa + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[46], # C47 - NumParte + DescripcionE=StringHelper.clean_text(row[18]), # C19 + DescripcionI=StringHelper.clean_text(row[19]), # C20 + CantidadIE=float(row[20]) if row[20] else 0.0, # C21 + UniMed=row[21], # C22 + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[26], # C27 - OrdenCompra + FraccionArancelaria=row[27], # C28 - FraccionExpo + Preferencia=row[28], # C29 - TipoFraccion + Sector=row[30], # C31 - Sector + PaisOrigen=row[31], # C32 - PaisOrigen + Aduana=aduana_nombre, + Advalorem=row[37], # C38 - EsSubPartida + TipoExpo='EXPO REP', + PedimentoR1=pedimento_r1, + EDocument=row[39], # C40 - EDocument + NumOperacionVU=row[40], # C41 - NumOperacionVU + Series=series_info, + Marca=StringHelper.clean_text(row[42]), # C43 + Modelo=StringHelper.clean_text(row[43]), # C44 + FraccionAmericana=row[44], # C45 - FraccionAme + ECCN=row[45], # C46 - ECCN + SimboloEx=simbolo_ex, + FechaEmision=parse_yyyymmdd_date(row[48]) if row[48] else None, # C49 - FechaFactura + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[49], # C50 - UsuarioCap + UsuarioAcr=row[50], # C51 - UsuarioAct + Transportista=row[51], # C52 - Transportista + NumCaja=row[52], # C53 - Transporte + NumTrasporte + Pedimento18=row[53], # C54 - Pedimento18 + AduanaCru=row[32], # C33 - Aduana_Cruce + Lote=row[54] if len(row) > 54 else '' # C55 - Lote + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed export repair movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed export repair movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: ExportRepairFilter) -> str: + """Build WHERE clause for export repair query.""" + where_conditions = [] + + # STRICT SEPARATION: Only exports for repair + where_conditions.append("ih.operation_type = 'exp'") + # GOLDEN RULE: If movement_type is ALL, only filter by operation_type + if filters.movement_type.value == "ALL": + pass + else: + where_conditions.append("ih.invoice_type = 'REPAR'") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "AFIJO": + where_conditions.append("ih.document_type = 'AFIJO'") + elif filters.movement_type.value == "NODES": + where_conditions.append("ih.document_type = 'NODES'") + + return " AND ".join(where_conditions) + + return total_me, total_mn + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> str: + """Get driver badge number for invoice.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return None \ No newline at end of file diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py new file mode 100644 index 00000000..7b2d7fdb --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py @@ -0,0 +1,1071 @@ +""" +SQL Query builders for invoice movement services. +Centralizes all SQL query construction logic. +""" + + +class TemporaryImportQueries: + """SQL queries for temporary imports using PostgreSQL tables.""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: db_name parameter kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_num, log.license_plate), ''), '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE(lf_agg.sum_value_mxn, 0) AS valor_comercial_mn, + COALESCE(lf_agg.sum_value_temp_mxn, 0) AS valor_mp_temp_mn, + COALESCE(lf_agg.sum_value_added_mxn, 0) AS valor_agre_mn, + COALESCE(lf_agg.sum_value_temp_usd, 0) AS valor_mp_temp_usd, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(COALESCE(lf.value_mxn, 0)) AS sum_value_mxn, + SUM(COALESCE(lf.value_temp_material_mxn, 0)) AS sum_value_temp_mxn, + SUM(COALESCE(lf.value_added_mxn, 0)) AS sum_value_added_mxn, + SUM(COALESCE(lf.value_temp_material_usd, 0)) AS sum_value_temp_usd, + SUM(COALESCE(lf.value_usd, 0)) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + ORDER BY ih.invoice_number + """ + + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL.""" + # Note: db_name parameter is kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(prov.name, '') AS C8, + COALESCE(client.name, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(il.unit_of_measure::text, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(il.order, ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(il.material_type, 'P') AS C40, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C41, -- [40] rectification_id + cmp.edocument AS C42, -- [41] + cmp.vucem_operation_num AS C43, -- [42] + COALESCE(il.line_number, 0) AS C44, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, fac.eccn_code, '') AS C48, + COALESCE(prt.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_num, log.license_plate), ''), '') AS C55, + '' AS C56, + COALESCE(ld.lot, '') AS C57, + '' AS C58, + COALESCE(lf.value_temp_material_mxn, 0) AS C59, + COALESCE(lf.value_temp_material_usd, 0) AS C60 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for an invoice.""" + return f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information.""" + return f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number.""" + return f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """ + + +class DefinitiveImportQueries: + """SQL queries for definitive imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(cmp.aduana, '') AS C39, + ih.id AS C35, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C42, + COALESCE(cmp.edocument, '') AS C43, + COALESCE(cmp.vucem_operation_num, '') AS C44, + COALESCE(fin.exchange_rate, 0) AS C51, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C52, + COALESCE(ih.capture_user, '') AS C53, + COALESCE(ih.who_updated, '') AS C54, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C56, + '' AS C57, + '' AS C58, + '' AS C59, + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') + AND {where_clause} + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL for definitive imports.""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(prov.name, '') AS C8, + COALESCE(client.name, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(um.code, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(il.order, ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(il.material_type, 'P') AS C40, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C41, + cmp.edocument AS C42, + cmp.vucem_operation_num AS C43, + COALESCE(il.line_number, 0) AS C44, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, fac.eccn_code, '') AS C48, + COALESCE(prt.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C55, + '' AS C56, + COALESCE(ld.lot, '') AS C57, + '' AS C58, + 0 AS C59, + 0 AS C60 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.clients_and_providers prov ON prov.id = cmp.provider_id + LEFT JOIN a76.clients_and_providers client ON client.id = cmp.sold_to_id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for a definitive import invoice.""" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE il.invoice_id = :consecutivo + + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for definitive imports.""" + # TODO: QSeriesDef table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for definitive imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class RepairImportQueries: + """SQL queries for repair imports (PostgreSQL schema). + + Note: Repair imports are NOT identified by invoice_type, but by having + cross-references (search_invoice field) that link them to export invoices. + These are regular import invoices (TEM, DEF, etc.) that were imported for repair. + """ + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + + return f""" + SELECT + ih.invoice_number AS C2, + COALESCE(ped.pedimento_number, '') AS C3, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C4, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C5, + COALESCE(ped.pedimento_code, '') AS C6, + COALESCE(ped.regime, '') AS C7, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C9, + COALESCE(cmp.remesa::text, '') AS C10, + COALESCE(fin.exchange_rate, 0) AS C11, + COALESCE(cmp.provider_id::text, '') AS C12, + COALESCE(cmp.sold_to_id::text, '') AS C13, + COALESCE(cmp.customs_broker_id::text, '') AS C14, + COALESCE(ih.purchase_order, '') AS C24, + COALESCE(ped.customs_office, '') AS C29, + ih.id AS C30, + COALESCE(cmp.edocument, '') AS C33, + COALESCE(cmp.vucem_operation_num, '') AS C34, + COALESCE(fin.exchange_rate, 0) AS C40, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C41, + COALESCE(ih.capture_user, '') AS C42, + COALESCE(ih.who_updated, '') AS C43, + COALESCE(log.carrier_id, '') AS C44, + COALESCE(log.transport_num, '') AS C45, + COALESCE(ped.pedimento_code, '') AS C47, + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C48, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE 1=1 {discharge_filter} + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id + WHERE ih.operation_type = 'imp' + AND COALESCE(cmp.is_regime_change, false) = false + AND EXISTS ( + SELECT 1 FROM a76.item_lines il2 + INNER JOIN a24.fa_item_lines fil2 ON fil2.id = il2.id + WHERE il2.invoice_id = ih.id AND fil2.search_invoice IS NOT NULL + {discharge_filter} + ) + {"AND " + where_str if where_str else ""} + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build main SQL query for repair import data.""" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" + SELECT + il.line_number, + ih.invoice_number, + COALESCE(ped.pedimento_number, ''), + TO_CHAR(ih.invoice_date, 'YYYYMMDD'), + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END, + COALESCE(ped.pedimento_code, ''), + COALESCE(ped.regime, ''), + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), ''), + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), ''), + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), ''), + COALESCE(cmp.remesa::text, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(cmp.provider_id::text, ''), + COALESCE(cmp.sold_to_id::text, ''), + COALESCE(cmp.customs_broker_id::text, ''), + COALESCE(prt.part_number::text, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lq.quantity, 0), + COALESCE(il.unit_of_measure, 0), + COALESCE(lf.value_mxn, 0), + COALESCE(lf.value_usd, 0), + COALESCE(lq.net_weight, 0), + COALESCE(lq.gross_weight, 0), + COALESCE(il.order, ih.purchase_order, ''), + COALESCE(lc.fraction, ''), + '', + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), ''), + COALESCE(lc.origin_country, ''), + COALESCE(ped.customs_office, ''), + ih.id, + COALESCE(il.material_type, 'P'), + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ), + COALESCE(cmp.edocument, ''), + COALESCE(cmp.vucem_operation_num, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lc.american_fraction, ''), + COALESCE(prt.eccn, fac.eccn_code, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), ''), + COALESCE(ih.capture_user, ''), + COALESCE(ih.who_updated, ''), + COALESCE(log.carrier_id, ''), + COALESCE(log.transport_num, ''), + '', + COALESCE(ped.pedimento_code, '') + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND COALESCE(cmp.is_regime_change, false) = false + AND fil.search_invoice IS NOT NULL + {"AND " + where_str if where_str else ""} + {discharge_filter} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for a repair import invoice.""" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE il.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for repair imports.""" + # TODO: QSeriesImpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for repair imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportQueries: + """SQL queries for exports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """ + Build optimized query for NORMAL mode (grouped by invoice with totals). + + Args: + db_name: Database name (not used in PostgreSQL version) + where_clause: Additional WHERE conditions (without WHERE keyword) + """ + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(log.payment_receipt_num, '') AS C12, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(cmp.aduana, '') AS C33, + COALESCE(ih.invoice_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C54, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id + WHERE {where_clause} + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + '' AS C4, -- [3] + ped.pedimento_code AS C5, -- [4] + ped.regime AS C6, -- [5] + pd.entry_date AS C7, -- [6] + COALESCE(pd.end_date, pd.payment_date) AS C8, -- [7] + pd.payment_date AS C9, -- [8] + log.payment_receipt_num AS C12, -- [11] + '' AS C13, -- [12] + cmp.provider_id AS C14, -- [13] + cmp.sold_to_id AS C15, -- [14] + cmp.customs_broker_id AS C16, -- [15] + '' AS C17, -- [16] + COALESCE(prt.part_number::text, '') AS C18, -- [17] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, -- [18] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, -- [19] + lq.quantity AS C21, -- [20] + um.code AS C22, -- [21] + '' AS C23, -- [22] + '' AS C24, -- [23] + COALESCE(lq.net_weight, 0) AS C25, -- [24] + COALESCE(lq.gross_weight, 0) AS C26, -- [25] + COALESCE(il.order, ih.purchase_order, '') AS C27, -- [26] + COALESCE(lc.fraction, '') AS C28, -- [27] + COALESCE(lc.fraction_type, '') AS C29, -- [28] + COALESCE(lc.advalorem_numeric, 0) AS C30, -- [29] + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C31, -- [30] + COALESCE(lc.origin_country, '') AS C32, -- [31] + cmp.aduana AS C33, -- [32] + ih.invoice_type AS C34, -- [33] + ih.id AS C35, -- [34] + lf.value_mxn AS C36, -- [35] + lf.value_usd AS C37, -- [36] + il.material_type AS C38, -- [37] + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C39, -- [38] rectification_id + cmp.edocument AS C40, -- [39] + cmp.vucem_operation_num AS C41, -- [40] + il.line_number AS C42, -- [41] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, -- [42] + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, -- [43] + COALESCE(cls.us_fraction, '') AS C45, -- [44] + COALESCE(prt.eccn, fac.eccn_code, '') AS C46, -- [45] + prt.id AS C47, -- [46] + fin.exchange_rate AS C48, -- [47] + ih.emission_date AS C49, -- [48] + ih.capture_user AS C50, -- [49] + ih.who_updated AS C51, -- [50] + '' AS C52, -- [51] + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, -- [52] NumCaja + '' AS C54, -- [53] Pedimento18 + COALESCE(ld.lot, '') AS C55, -- [54] Lote + '' AS C56, -- [55] TipoPedimentoTransporte + '' AS C57, -- [56] + '' AS C58, -- [57] + '' AS C59, -- [58] + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export invoice. + + Only sums partidas where is_subitem is false (main partidas, not sub-items). + """ + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE il.invoice_id = :consecutivo + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for exports.""" + # TODO: QSeriesExpo table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for exports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportRepairQueries: + """SQL queries for export repairs (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, + COALESCE(fin.value_me, 0) AS total_me, + COALESCE(fin.value_mn, 0) AS total_mn, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C54, + COALESCE(lf_agg.sum_value_usd, 0) AS sum_value_usd, + COALESCE(lf_agg.sum_value_mxn, 0) AS sum_value_mxn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN ( + SELECT il.invoice_id, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_mxn, 0) END) AS sum_value_mxn, + SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE COALESCE(lf.value_usd, 0) END) AS sum_value_usd + FROM a76.item_lines il + JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + WHERE 1=1 {discharge_filter} + GROUP BY il.invoice_id + ) lf_agg ON lf_agg.invoice_id = ih.id + WHERE ih.operation_type = 'exp' + AND ih.invoice_type = 'REPAR' + {"AND " + where_str if where_str else ""} + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for export repair data.""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + COALESCE(fin.value_me, 0) AS C4, + COALESCE(fin.value_mn, 0) AS C5, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(pd.entry_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(pd.end_date, 'YYYYMMDD'), TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(pd.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + '' AS C17, + COALESCE(cls.class_code, '') AS C18, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(cls.description_en, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, + COALESCE(lq.quantity, 0) AS C21, + COALESCE(il.unit_of_measure, 0) AS C22, + COALESCE(lf.customs_value_mxn, 0) AS C23, + COALESCE(lf.customs_value_usd, 0) AS C24, + COALESCE(lq.net_weight, 0) AS C25, + COALESCE(lq.gross_weight, 0) AS C26, + COALESCE(il.order, ih.purchase_order, '') AS C27, + COALESCE(lc.fraction, '') AS C28, + COALESCE(lc.fraction_type, '') AS C29, + COALESCE(lc.advalorem_numeric, 0) AS C30, + COALESCE(NULLIF(lc.sector, ''), NULLIF(fap.sector, ''), '') AS C31, + COALESCE(lc.origin_country, '') AS C32, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(lf.value_mxn, 0) AS C36, + COALESCE(lf.value_usd, 0) AS C37, + COALESCE(il.material_type, 'P') AS C38, + COALESCE( + ped_r1.year || '-' || ped_r1.customs_office || '-' || ped_r1.license || '-' || ped_r1.pedimento_number, + pro_origin.original_pedimento_year || '-' || pro_origin.original_customs_office || '-' || pro_origin.original_license || '-' || pro_origin.original_pedimento_number, + '' + ) AS C39, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(il.line_number, 0) AS C42, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, + COALESCE(cls.us_fraction, '') AS C45, + COALESCE(prt.eccn, fac.eccn_code, '') AS C46, + COALESCE(prt.part_number::text, '') AS C47, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(NULLIF(CONCAT_WS(' ', log.transport_id, log.transport_num), ''), '') AS C53, + '' AS C54, + COALESCE(ld.lot, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + '' AS C59 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimento_rectification_origin pro_origin ON pro_origin.pedimento_id = ped.id + LEFT JOIN a76.pedimento_rectification_origin pro_rect ON + pro_rect.original_pedimento_year = ped.year AND + pro_rect.original_customs_office = ped.customs_office AND + pro_rect.original_license = ped.license AND + pro_rect.original_pedimento_number = ped.pedimento_number + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = pro_rect.pedimento_id + LEFT JOIN a76.pedimento_dates pd ON pd.pedimento_id = ped.id + LEFT JOIN a76.item_lines il ON il.invoice_id = ih.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a24.fa_classes fac ON fac.class_id = cls.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number_id + LEFT JOIN a24.fa_partes fap ON fap.id = prt.id + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') + AND UPPER(ih.invoice_type) IN ('DEF', 'REPAR', 'EXDEF', 'MATDE') + AND {where_str} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export repair invoice.""" + # Use fa_item_lines.download field (true = discharged, false = not discharged) + if "SiDes" in discharge_clause: + discharge_filter = "AND fil.download = true" + elif "NoDes" in discharge_clause: + discharge_filter = "AND fil.download = false" + else: + discharge_filter = "" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON il.id = lf.item_line_id + WHERE il.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for export repairs.""" + # TODO: QSeriesExpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for export repairs.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak new file mode 100644 index 00000000..f74e0da8 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/query_builders.py.bak @@ -0,0 +1,877 @@ +""" +SQL Query builders for invoice movement services. +Centralizes all SQL query construction logic. +""" + + +class TemporaryImportQueries: + """SQL queries for temporary imports using PostgreSQL tables.""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: db_name parameter kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + COALESCE(ped_r1.pedimento_number, '') AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, cmp.remesa, fin.exchange_rate, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, cmp.aduana, ped_r1.pedimento_number, + cmp.edocument, cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num, log.license_plate + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for DETAILED mode (all partidas) from PostgreSQL.""" + # Note: db_name parameter is kept for compatibility but not used in PostgreSQL + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(fin.value_me, 0) AS C6, + COALESCE(fin.value_mn, 0) AS C7, + COALESCE(cmp.provider_id::text, '') AS C8, + COALESCE(cmp.sold_to_id::text, '') AS C9, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(cmp.remesa, 0) AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + '' AS C19, + COALESCE(il.class_id::text, '') AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C22, + COALESCE(lq.quantity, 0) AS C23, + COALESCE(il.unit_of_measure::text, '') AS C24, + COALESCE(lf.value_mxn, 0) AS C25, + COALESCE(lf.customs_value_mxn, 0) AS C26, + COALESCE(lf.value_usd, 0) AS C27, + COALESCE(lf.customs_value_usd, 0) AS C28, + COALESCE(lq.net_weight, 0) AS C29, + COALESCE(lq.gross_weight, 0) AS C30, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(lc.fraction, '') AS C32, + COALESCE(lc.fraction_type, '') AS C33, + COALESCE(lc.advalorem_numeric, 0) AS C34, + COALESCE(lc.sector, '') AS C35, + COALESCE(lf.igi_amount_usd, 0) AS C36, + COALESCE(lc.origin_country, '') AS C37, + COALESCE(cmp.aduana, '') AS C38, + ih.id AS C39, + FALSE AS C40, + '' AS C41, + COALESCE(cmp.edocument, '') AS C42, + COALESCE(cmp.vucem_operation_num, '') AS C43, + COALESCE(il.line_number, 0) AS C44, + '' AS C45, + '' AS C46, + COALESCE(cls.us_fraction, '') AS C47, + COALESCE(prt.eccn, '') AS C48, + COALESCE(il.part_number::text, '') AS C49, + COALESCE(fin.exchange_rate, 0) AS C50, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C51, + COALESCE(ih.capture_user, '') AS C52, + COALESCE(ih.who_updated, '') AS C53, + COALESCE(log.carrier_id, '') AS C54, + COALESCE(log.transport_num || ' ' || log.license_plate, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.item_lines il ON il.item_id = ( + SELECT id FROM a76.items WHERE invoice_id = ih.id LIMIT 1 + ) + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'TEM' + AND {where_str} + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for an invoice.""" + return f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information.""" + return f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number.""" + return f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """ + + +class DefinitiveImportQueries: + """SQL queries for definitive imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C4, + COALESCE(ped.pedimento_code, '') AS C5, + COALESCE(ped.regime, '') AS C10, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C11, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C12, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C13, + COALESCE(log.payment_receipt_num, '') AS C14, + COALESCE(fin.exchange_rate, 0) AS C15, + COALESCE(cmp.provider_id::text, '') AS C16, + COALESCE(cmp.sold_to_id::text, '') AS C17, + COALESCE(cmp.customs_broker_id::text, '') AS C18, + COALESCE(ih.purchase_order, '') AS C31, + COALESCE(cmp.aduana, '') AS C39, + ih.id AS C35, + COALESCE(ped_r1.pedimento_number, '') AS C42, + COALESCE(cmp.edocument, '') AS C43, + COALESCE(cmp.vucem_operation_num, '') AS C44, + COALESCE(fin.exchange_rate, 0) AS C51, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C52, + COALESCE(ih.capture_user, '') AS C53, + COALESCE(ih.who_updated, '') AS C54, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, + '' AS C57, + '' AS C58, + '' AS C59, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.pedimentos ped_r1 ON ped_r1.id = cmp.pedimento_r1 + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type IN ('DEF', 'EXDEF', 'MATDE') + AND {where_clause} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, + ih.purchase_order, cmp.aduana, ped_r1.pedimento_number, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + ped.status AS C4, -- [3] + ped.pedimento_code AS C5, -- [4] + '' AS C6, '' AS C7, '' AS C8, '' AS C9, -- [5-8] + ped.regime AS C10, -- [9] + log.entry_exit_date AS C11, -- [10] + log.delivery_date AS C12, -- [11] + log.payment_date AS C13, -- [12] + log.payment_receipt_num AS C14, -- [13] + '' AS C15, -- [14] + cmp.provider_id AS C16, -- [15] + cmp.sold_to_id AS C17, -- [16] + cmp.customs_broker_id AS C18, -- [17] + '' AS C19, -- [18] + prt.part_number AS C20, -- [19] + ld.description_spanish AS C21, -- [20] + ld.description_english AS C22, -- [21] + lq.quantity AS C23, -- [22] + um.code AS C24, -- [23] + lf.value_mxn AS C25, -- [24] + '' AS C26, -- [25] + lf.value_usd AS C27, -- [26] + '' AS C28, -- [27] + lq.net_weight AS C29, -- [28] + lq.gross_weight AS C30, -- [29] + ih.purchase_order AS C31, -- [30] + lc.fraction AS C32, -- [31] + '' AS C33, '' AS C34, -- [32-33] + ih.id AS C35, -- [34] + '' AS C36, '' AS C37, -- [35-36] + lc.origin_country AS C38, -- [37] + cmp.aduana AS C39, -- [38] + il.material_type AS C40, -- [39] + il.id AS C41, -- [40] + '' AS C42, -- [41] rectification_id + cmp.edocument AS C43, -- [42] + cmp.vucem_operation_num AS C44, -- [43] + il.line_number AS C45, -- [44] + ld.brand AS C46, -- [45] + ld.model AS C47, -- [46] + prt.us_fraction AS C48, -- [47] + prt.eccn AS C49, -- [48] + prt.id AS C50, -- [49] + fin.exchange_rate AS C51, -- [50] + ih.emission_date AS C52, -- [51] + ih.capture_user AS C53, -- [52] + ih.who_updated AS C54, -- [53] + '' AS C55, -- [54] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C56, -- [55] + '' AS C57, -- [56] Pedimento18 (row[56]) + COALESCE(ld.lot, '') AS C58, -- [57] Lote (row[57]) + '' AS C59, -- [58] TipoPed (row[58]) + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str) -> str: + """Build query to get totals for a definitive import invoice.""" + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for definitive imports.""" + # TODO: QSeriesDef table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for definitive imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class RepairImportQueries: + """SQL queries for repair imports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + ih.invoice_number AS C2, + COALESCE(ped.pedimento_number, '') AS C3, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C4, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C5, + COALESCE(ped.pedimento_code, '') AS C6, + COALESCE(ped.regime, '') AS C7, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C9, + COALESCE(cmp.remesa::text, '') AS C10, + COALESCE(fin.exchange_rate, 0) AS C11, + COALESCE(cmp.provider_id::text, '') AS C12, + COALESCE(cmp.sold_to_id::text, '') AS C13, + COALESCE(cmp.customs_broker_id::text, '') AS C14, + COALESCE(ih.purchase_order, '') AS C24, + COALESCE(ped.customs_office, '') AS C29, + ih.id AS C30, + COALESCE(cmp.edocument, '') AS C33, + COALESCE(cmp.vucem_operation_num, '') AS C34, + COALESCE(fin.exchange_rate, 0) AS C40, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C41, + COALESCE(ih.capture_user, '') AS C42, + COALESCE(ih.who_updated, '') AS C43, + COALESCE(log.carrier_id, '') AS C44, + COALESCE(log.transport_num, '') AS C45, + COALESCE(ped.pedimento_code, '') AS C47, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, cmp.edocument, + cmp.vucem_operation_num, ih.emission_date, ih.capture_user, ih.who_updated, + log.carrier_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build main SQL query for repair import data.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + il.line_number, + ih.invoice_number, + COALESCE(ped.pedimento_number, ''), + TO_CHAR(ih.invoice_date, 'YYYYMMDD'), + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END, + COALESCE(ped.pedimento_code, ''), + COALESCE(ped.regime, ''), + '', + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), ''), + COALESCE(cmp.remesa::text, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(cmp.provider_id::text, ''), + COALESCE(cmp.sold_to_id::text, ''), + COALESCE(cmp.customs_broker_id::text, ''), + COALESCE(il.part_number::text, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_english, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lq.quantity, 0), + COALESCE(il.unit_of_measure, 0), + COALESCE(lf.value_mxn, 0), + COALESCE(lf.value_usd, 0), + COALESCE(lq.net_weight, 0), + COALESCE(lq.gross_weight, 0), + COALESCE(ih.purchase_order, ''), + COALESCE(lc.fraction, ''), + '', + COALESCE(lc.sector, ''), + COALESCE(lc.origin_country, ''), + COALESCE(ped.customs_office, ''), + ih.id, + 'P', + '', + COALESCE(cmp.edocument, ''), + COALESCE(cmp.vucem_operation_num, ''), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' '), + COALESCE(lc.american_fraction, ''), + COALESCE(prt.eccn, ''), + COALESCE(fin.exchange_rate, 0), + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), ''), + COALESCE(ih.capture_user, ''), + COALESCE(ih.who_updated, ''), + COALESCE(log.carrier_id, ''), + COALESCE(log.transport_num, ''), + '', + COALESCE(ped.pedimento_code, '') + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE ih.operation_type = 'imp' + AND ih.invoice_type = 'REP' + AND COALESCE(cmp.is_regime_change, false) = false + {"AND " + where_str if where_str else ""} + {discharge_filter} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for a repair import invoice.""" + # Note: is_discharged field not yet migrated to PostgreSQL schema + # discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + discharge_filter = "" # Temporarily disabled until schema migration + return f""" + SELECT + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0), + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for repair imports.""" + # TODO: QSeriesImpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for repair imports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportQueries: + """SQL queries for exports (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_clause: str) -> str: + """ + Build optimized query for NORMAL mode (grouped by invoice with totals). + + Args: + db_name: Database name (not used in PostgreSQL version) + where_clause: Additional WHERE conditions (without WHERE keyword) + """ + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.entry_exit_date, 'YYYYMMDD'), '') AS C9, + COALESCE(TO_CHAR(log.delivery_date, 'YYYYMMDD'), '') AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(log.payment_receipt_num, '') AS C12, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(cmp.aduana, '') AS C33, + COALESCE(ih.invoice_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.emission_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE {where_clause} + GROUP BY ih.id, ih.invoice_number, ih.is_updated, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.entry_exit_date, log.delivery_date, log.payment_date, log.payment_receipt_num, + cmp.provider_id, cmp.sold_to_id, cmp.customs_broker_id, ih.purchase_order, cmp.aduana, + ih.invoice_type, cmp.edocument, cmp.vucem_operation_num, fin.exchange_rate, + ih.emission_date, ih.capture_user, ih.who_updated, log.transport_id, log.transport_num, + ih.invoice_date + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_clause: str) -> str: + return f""" + SELECT + ih.invoice_number AS C1, -- [0] + ped.pedimento_number AS C2, -- [1] + ih.invoice_date AS C3, -- [2] + '' AS C4, -- [3] + '' AS C5, -- [4] + ped.status AS C6, -- [5] + ped.pedimento_code AS C7, -- [6] + ped.regime AS C8, -- [7] + log.entry_exit_date AS C9, -- [8] + log.delivery_date AS C10, -- [9] + log.payment_date AS C11, -- [10] + log.payment_receipt_num AS C12, -- [11] + '' AS C13, -- [12] + cmp.provider_id AS C14, -- [13] + cmp.sold_to_id AS C15, -- [14] + cmp.customs_broker_id AS C16, -- [15] + '' AS C17, -- [16] + prt.part_number AS C18, -- [17] + ld.description_spanish AS C19, -- [18] + ld.description_english AS C20, -- [19] + lq.quantity AS C21, -- [20] + um.code AS C22, -- [21] + '' AS C23, -- [22] + '' AS C24, -- [23] + lq.net_weight AS C25, -- [24] + lq.gross_weight AS C26, -- [25] + ih.purchase_order AS C27, -- [26] + lc.fraction AS C28, -- [27] + '' AS C29, -- [28] + '' AS C30, -- [29] + '' AS C31, -- [30] + '' AS C32, -- [31] + cmp.aduana AS C33, -- [32] + ih.invoice_type AS C34, -- [33] + ih.id AS C35, -- [34] + lf.value_mxn AS C36, -- [35] + lf.value_usd AS C37, -- [36] + il.material_type AS C38, -- [37] + '' AS C39, -- [38] rectification_id + cmp.edocument AS C40, -- [39] + cmp.vucem_operation_num AS C41, -- [40] + il.line_number AS C42, -- [41] + ld.brand AS C43, -- [42] + ld.model AS C44, -- [43] + prt.us_fraction AS C45, -- [44] + prt.eccn AS C46, -- [45] + prt.id AS C47, -- [46] + fin.exchange_rate AS C48, -- [47] + ih.emission_date AS C49, -- [48] + ih.capture_user AS C50, -- [49] + ih.who_updated AS C51, -- [50] + '' AS C52, -- [51] + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, -- [52] NumCaja + '' AS C54, -- [53] Pedimento18 + COALESCE(ld.lot, '') AS C55, -- [54] Lote + '' AS C56, -- [55] TipoPedimentoTransporte + '' AS C57, -- [56] + '' AS C58, -- [57] + '' AS C59, -- [58] + '' AS C60 -- [59] Relleno final + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE {where_clause} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export invoice. + + Only sums partidas where is_subitem is false (main partidas, not sub-items). + """ + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for exports.""" + # TODO: QSeriesExpo table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for exports.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ + + +class ExportRepairQueries: + """SQL queries for export repairs (PostgreSQL schema).""" + + @staticmethod + def build_aggregated_query(db_name: str, where_str: str, discharge_clause: str = "") -> str: + """Build optimized query for NORMAL mode (grouped by invoice with totals).""" + # Note: discharge_clause temporarily disabled until is_discharged field migrated + discharge_filter = "" # Will be: " AND il.is_discharged = true/false" when ready + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_usd END), 0) AS total_me, + COALESCE(SUM(CASE WHEN COALESCE(fil.is_subitem, false) THEN 0 ELSE lf.value_mxn END), 0) AS total_mn + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items i ON i.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = i.id + LEFT JOIN a24.fa_item_lines fil ON fil.id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + WHERE ih.operation_type = 'exp' + AND ih.invoice_type = 'REP' + {"AND " + where_str if where_str else ""} + GROUP BY ih.id, ih.invoice_number, ped.pedimento_number, ped.pedimento_code, ped.regime, + log.payment_date, cmp.remesa, fin.exchange_rate, cmp.provider_id, cmp.sold_to_id, + cmp.customs_broker_id, ih.purchase_order, ped.customs_office, ih.document_type, + cmp.edocument, cmp.vucem_operation_num, ih.invoice_date, ih.capture_user, + ih.who_updated, log.carrier_id, log.transport_id, log.transport_num + ORDER BY ih.invoice_number + """ + + @staticmethod + def build_main_query(db_name: str, where_str: str) -> str: + """Build main SQL query for export repair data.""" + return f""" + SELECT + ih.invoice_number AS C1, + COALESCE(ped.pedimento_number, '') AS C2, + TO_CHAR(ih.invoice_date, 'YYYYMMDD') AS C3, + COALESCE(fin.value_me, 0) AS C4, + COALESCE(fin.value_mn, 0) AS C5, + CASE WHEN ih.is_updated THEN 'AC' ELSE 'NA' END AS C6, + COALESCE(ped.pedimento_code, '') AS C7, + COALESCE(ped.regime, '') AS C8, + '' AS C9, + '' AS C10, + COALESCE(TO_CHAR(log.payment_date, 'YYYYMMDD'), '') AS C11, + COALESCE(cmp.remesa::text, '') AS C12, + COALESCE(fin.exchange_rate, 0) AS C13, + COALESCE(cmp.provider_id::text, '') AS C14, + COALESCE(cmp.sold_to_id::text, '') AS C15, + COALESCE(cmp.customs_broker_id::text, '') AS C16, + '' AS C17, + COALESCE(cls.class_code, '') AS C18, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.description_spanish, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C19, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(cls.description_en, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C20, + COALESCE(lq.quantity, 0) AS C21, + COALESCE(il.unit_of_measure, 0) AS C22, + COALESCE(lf.customs_value_mxn, 0) AS C23, + COALESCE(lf.customs_value_usd, 0) AS C24, + COALESCE(lq.net_weight, 0) AS C25, + COALESCE(lq.gross_weight, 0) AS C26, + COALESCE(ih.purchase_order, '') AS C27, + COALESCE(lc.fraction, '') AS C28, + COALESCE(lc.fraction_type, '') AS C29, + COALESCE(lc.advalorem_numeric, 0) AS C30, + COALESCE(lc.sector, '') AS C31, + COALESCE(lc.origin_country, '') AS C32, + COALESCE(ped.customs_office, '') AS C33, + COALESCE(ih.document_type, '') AS C34, + ih.id AS C35, + COALESCE(lf.value_mxn, 0) AS C36, + COALESCE(lf.value_usd, 0) AS C37, + 'P' AS C38, + '' AS C39, + COALESCE(cmp.edocument, '') AS C40, + COALESCE(cmp.vucem_operation_num, '') AS C41, + COALESCE(il.line_number, 0) AS C42, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.brand, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C43, + REPLACE(REPLACE(REPLACE(REPLACE(COALESCE(ld.model, ''), CHR(44), ' '), CHR(9), ' '), CHR(10), ' '), CHR(13), ' ') AS C44, + COALESCE(cls.us_fraction, '') AS C45, + COALESCE(prt.eccn, '') AS C46, + COALESCE(il.part_number::text, '') AS C47, + COALESCE(fin.exchange_rate, 0) AS C48, + COALESCE(TO_CHAR(ih.invoice_date, 'YYYYMMDD'), '') AS C49, + COALESCE(ih.capture_user, '') AS C50, + COALESCE(ih.who_updated, '') AS C51, + COALESCE(log.carrier_id, '') AS C52, + COALESCE(log.transport_id || ' ' || log.transport_num, '') AS C53, + '' AS C54, + COALESCE(ld.lot, '') AS C55, + '' AS C56, + '' AS C57, + '' AS C58, + '' AS C59 + FROM a76.invoice_header ih + LEFT JOIN a76.invoice_compliance_mx cmp ON cmp.invoice_id = ih.id + LEFT JOIN a76.invoice_financials fin ON fin.invoice_id = ih.id + LEFT JOIN a76.invoice_logistics log ON log.invoice_id = ih.id + LEFT JOIN a76.pedimentos ped ON ped.id = cmp.pedimento_id + LEFT JOIN a76.items itm ON itm.invoice_id = ih.id + LEFT JOIN a76.item_lines il ON il.item_id = itm.id + LEFT JOIN a76.item_line_descriptions ld ON ld.item_line_id = il.id + LEFT JOIN a76.item_line_quantities lq ON lq.item_line_id = il.id + LEFT JOIN a76.item_line_financials lf ON lf.item_line_id = il.id + LEFT JOIN a76.item_line_customs lc ON lc.item_line_id = il.id + LEFT JOIN a76.classes cls ON cls.id = il.class_id + LEFT JOIN a76.parts prt ON prt.id = il.part_number + LEFT JOIN a76.units_of_measure um ON um.id = il.unit_of_measure + WHERE UPPER(ih.operation_type) IN ('EXP', 'TRA', 'RET') + AND UPPER(ih.invoice_type) IN ('DEF', 'REP', 'EXDEF', 'MATDE') + AND {where_str} + ORDER BY ih.invoice_number, il.line_number + """ + + @staticmethod + def build_totals_query(db_name: str, discharge_clause: str = "") -> str: + """Build query to get totals for an export repair invoice.""" + discharge_filter = "AND il.is_discharged = true" if "descargado" in discharge_clause.lower() else "" + return f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + INNER JOIN a76.items itm ON itm.id = il.item_id + WHERE itm.invoice_id = :consecutivo + + {discharge_filter} + """ + + @staticmethod + def build_series_query(db_name: str) -> str: + """Build query to get series information for export repairs.""" + # TODO: QSeriesExpoRep table not migrated to PostgreSQL yet + return """ + SELECT '' as serie, '' as modelo, '' as parte + WHERE 1=0 + """ + + @staticmethod + def build_driver_badge_query(db_name: str) -> str: + """Build query to get driver badge number for export repairs.""" + # TODO: GConductor table not migrated to PostgreSQL yet + return """ + SELECT '' as badge + WHERE 1=0 + """ diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py new file mode 100644 index 00000000..bf89f124 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/repair.py @@ -0,0 +1,400 @@ +""" +Repair import service - handles IMPRE movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportRepairFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import RepairImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class RepairImportService: + """Service for handling repair import movements (IMPRE).""" + + def get_movements( + self, + db: Session, + filters: "ImportRepairFilter" + ) -> List["MovementItem"]: + """ + Get repair import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching repair import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode + sql = text(RepairImportQueries.build_aggregated_query( + filters.database_name, + where_clause, + filters.discharge_filter.value + )) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} repair import invoices") + + movements = [] + + for row in results: + factura = row[0] # C2 - FacturaImpoRep + estatus = row[3] # C5 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[14] # C30 - Consecutivo + + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + + # Totals come directly from GROUP BY query (no N+1 problem) + total_me = to_float(row[24]) # total_me from SUM aggregation + total_mn = to_float(row[25]) # total_mn from SUM aggregation + sum_value_usd = to_float(row[27]) + sum_value_mxn = to_float(row[28]) + + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = sum_value_mxn if sum_value_mxn > 0 else total_mn + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=to_float(row[17]), # C40 - TipoCambio + fecha_pago=row[6], # C9 - Fecha_Pago + fecha_inicio='', # Not available in aggregated query + tipo_pedimento=row[23], # C47 - pedimento_code (used as tipo_pedimento) + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C3 - PedimentoImpoRep + row[26], # C48 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C3 - PedimentoImpoRep + FechaFactura=parse_yyyymmdd_date(row[2]), # C4 - FechaFactura + Estatus=row[3], # C5 - Estatus + ClavePed=row[4], # C6 - ClavePed + TipoMovTemDef='IMPRE', + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[15], # C33 - EDocument + NumOperacionVU=row[16], # C34 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[19], # C42 - UsuarioCap + UsuarioAcr=row[20], # C43 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(row[6]), # C9 - Fecha_Pago + NumCaja=row[22], # C45 - Transport num + Pedimento18='', # Not in aggregated query + AduanaCru=row[13], # C29 - customs_office + Lote='' # Not in aggregated query + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching repair import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportRepairFilter" + ) -> List["MovementItemDetailed"]: + """ + Get repair import movements (detailed mode - line by line). + + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed repair import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause with discharge filter + where_clause = self._build_where_clause(filters) + + # Add discharge filter to WHERE clause + discharge_clause = "" + if filters.discharge_filter.value == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif filters.discharge_filter.value == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + where_with_discharge = where_clause + discharge_clause + + # Execute main query + sql = text(RepairImportQueries.build_main_query(filters.database_name, where_with_discharge)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed repair import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[4] != 'AC': # C5 - Estatus + continue + + # Get all detailed information + proveedor_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[11], is_supplier=True + ) + vendido_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[12], is_supplier=False + ) + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[13] + ) + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[28] + ) + + # Calculate values using unified method + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[30], # 'P' or 'S' + valor_me=row[21], + valor_mn_direct=row[20], + fecha_pago=row[8], + fecha_inicio=row[7], + clave_ped=row[45], + tipo_cambio_partida=row[38], + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + if row[31] == 'P': + peso_neto = float(row[22]) if row[22] else 0.0 + peso_bruto = float(row[23]) if row[23] else 0.0 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[29], row[0], filters.is_shelter + ) + + simbolo_ex = None + if row[15]: + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[15], filters.is_shelter + ) + + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, row[2], row[32], filters.is_shelter + ) + + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[1] + ) + + movement = MovementItemDetailed( + Linea=row[0], + Factura=row[1], + Pedimento=row[2], + FechaFactura=row[3], + Estatus=row[4], + ClavePed=row[5], + TipoMovTemDef='IMPRE', + EsCambioRegimen='N', + Regimen=row[6], + Fecha_Inicio=parse_yyyymmdd_date(row[7]), + Fecha_Fin=parse_yyyymmdd_date(row[8]), + Fecha_Pago=parse_yyyymmdd_date(row[9]), + Remesa=row[10], + Proveedor=proveedor_info.get('name'), + RFCProveedor=proveedor_info.get('rfc'), + ProveedorTaxID=proveedor_info.get('tax_id'), + VendidoA=vendido_info.get('name'), + VendidoARFC=vendido_info.get('rfc'), + VendidoATaxID=vendido_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[15], + DescripcionE=StringHelper.clean_text(row[16]), + DescripcionI=StringHelper.clean_text(row[17]), + CantidadIE=float(row[18]) if row[18] else 0.0, + UniMed=row[19], + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[24], + FraccionArancelaria=row[25], + Preferencia=row[26], + Sector=row[27], + PaisOrigen=row[28], + Aduana=aduana_nombre, + Advalorem='', + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[33], + NumOperacionVU=row[34], + Series=series_info, + Marca=StringHelper.clean_text(row[35]), + Modelo=StringHelper.clean_text(row[36]), + FraccionAmericana=row[37], + ECCN=row[38], + SimboloEx=simbolo_ex, + FechaEmision=parse_yyyymmdd_date(row[40]) if row[40] else None, # C41 - FechaEmision + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[41], + UsuarioAcr=row[42], + Transportista=row[43], + NumCaja=row[44], + Pedimento18=row[45], + AduanaCru=row[29], + Lote=row[54] if len(row) > 54 else '' # Not in query but mapped safely + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed repair import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportRepairFilter") -> str: + """Build WHERE clause for repair imports query.""" + where_conditions = [] + + # STRICT SEPARATION: Only imports for repair + where_conditions.append("ih.operation_type = 'imp'") + # Repair imports are identified by cross-references, not invoice_type + where_conditions.append("COALESCE(cmp.is_regime_change, false) = false") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int, discharge_filter: str) -> tuple: + """Calculate totals for main partidas with discharge filter.""" + # Build discharge clause + # Note: is_discharged field not yet migrated to PostgreSQL schema + discharge_clause = "" + # Temporarily disabled until schema migration: + # if discharge_filter == "SiDes": + # discharge_clause = " AND il.is_discharged = true" + # elif discharge_filter == "NoDes": + # discharge_clause = " AND il.is_discharged = false" + + sql = text(f""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + INNER JOIN a76.item_lines il ON il.id = lf.item_line_id + WHERE il.invoice_id = :consecutivo + AND il.is_subitem = false + {discharge_clause} + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py new file mode 100644 index 00000000..1e3faa70 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services/temporary.py @@ -0,0 +1,459 @@ +""" +Temporary import service - handles IMTEM movements. +""" + +import logging +from datetime import datetime +from sqlalchemy import text +from sqlalchemy.orm import Session +from typing import List, Optional, TYPE_CHECKING + +if TYPE_CHECKING: + from ..schemas import ImportTemporaryFilter, MovementItem, MovementItemDetailed + +from .base import ConfigHelper, StringHelper +from .database_helpers import DatabaseHelper +from .exchange_rate import ExchangeRateCalculator +from .query_builders import TemporaryImportQueries + +logger = logging.getLogger(__name__) + + +def parse_yyyymmdd_date(date_str: str) -> Optional[datetime]: + """Parse date string in YYYYMMDD format to datetime.""" + if not date_str or date_str == '': + return None + try: + return datetime.strptime(date_str, '%Y%m%d') + except (ValueError, TypeError): + return None + + +class TemporaryImportService: + """Service for handling temporary import movements (IMTEM).""" + + def get_movements( + self, + db: Session, + filters: "ImportTemporaryFilter" + ) -> List["MovementItem"]: + """ + Get temporary import movements (normal mode - grouped by invoice). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of movement items grouped by invoice + """ + from ..schemas import MovementItem + + try: + logger.info(f"Fetching temporary import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute optimized aggregated query for NORMAL mode (GROUP BY with totals) + sql = text(TemporaryImportQueries.build_aggregated_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} temporary import invoices") + + movements = [] + + for row in results: + factura = row[0] # C1 - FacturaImpo + estatus = row[3] # C4 - Estatus (AC o NA) + + # Filtrar facturas según include_cancelled + # Si include_cancelled=False, solo mostrar AC (is_updated=true) + # Si include_cancelled=True, mostrar todas (AC y NA) + if not filters.include_cancelled and estatus != 'AC': + continue + + consecutivo = row[15] # C39 - Consecutivo + + # Helper to convert empty strings to None + def none_if_empty(val): + return None if val == '' else val + + # Helper to safely convert to float + def to_float(val): + if val is None or val == '': + return 0.0 + try: + return float(val) + except (ValueError, TypeError): + return 0.0 + + # Totals come directly from GROUP BY query (no N+1 problem) + # Correct indices based on TemporaryImportQueries.build_aggregated_query + total_me = to_float(row[28]) # total_me (index 28) + total_mn = to_float(row[29]) # total_mn (index 29) + valor_comercial_mn = to_float(row[30]) # valor_comercial_mn from item_line_financials + valor_mp_temp_mn = to_float(row[31]) # valor_mp_temp_mn from item_line_financials + valor_agre_mn = to_float(row[32]) # valor_agre_mn from item_line_financials + valor_mp_temp_usd = to_float(row[33]) # valor_mp_temp_usd from item_line_financials + sum_value_usd = to_float(row[34]) # sum_value_usd from item_line_financials (line item sum avoids zero-value header bug) + + # Replace zero values with the computed sums + total_me = sum_value_usd if sum_value_usd > 0 else total_me + total_mn = valor_comercial_mn if valor_comercial_mn > 0 else total_mn + + # Calculate exchange rate and value + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=total_me, + valor_mn=total_mn, + tipo_cambio_db=to_float(row[19]), # C50 - TipoCambio + fecha_pago=row[8], # C13 - Fecha_Pago + fecha_inicio=row[6], # C11 - Fecha_Inicio + tipo_pedimento=row[4], # C5 - ClavePed (Using correct index) + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, # Not used for temporary imports + met_trans=met_trans + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpo + row[16], # C41 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, factura + ) + + # Calculate exchange rate for MPTemp explicitly decoupled from Valor Comercial + valor_mp_temp_raw, _ = ExchangeRateCalculator.calculate_for_aggregated( + db=db, + db_name=filters.database_name, + valor_me=to_float(row[33]), # sum_value_temp_usd + valor_mn=to_float(row[31]), # sum_value_temp_mxn + tipo_cambio_db=to_float(row[19]), + fecha_pago=row[8], + fecha_inicio=row[6], + tipo_pedimento=row[4], + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=False, + met_trans=met_trans + ) + valor_mp_temp = float(valor_mp_temp_raw) + + # Build movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 - PedimentoImpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMTEM', + EsCambioRegimen='N', + ValorMPTemp=valor_mp_temp, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=valor_agre_mn, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[17], # C42 - EDocument + NumOperacionVU=row[18], # C43 - NumOperacionVU + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[21], # C52 - UsuarioCap + UsuarioAcr=row[22], # C53 - UsuarioAct + Fecha_Pago=parse_yyyymmdd_date(none_if_empty(row[8])), # C13 - Fecha_Pago + NumCaja=row[24], # C55 - transport_num || license_plate (index 24) + Pedimento18=row[25], # C56 - '' empty (index 25) + AduanaCru=row[14], # C38 - Aduana_Cruce (index 14) + Lote=row[26] # C57 - '' empty (index 26) + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} temporary import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching temporary import movements: {e}", exc_info=True) + raise + + def get_movements_detailed( + self, + db: Session, + filters: "ImportTemporaryFilter" + ) -> List["MovementItemDetailed"]: + """ + Get temporary import movements (detailed mode - line by line). + + Args: + db: Database session + filters: Filter criteria + + Returns: + List of detailed movement items (one per partida) + """ + from ..schemas import MovementItemDetailed + + try: + logger.info(f"Fetching detailed temporary import movements with filters: {filters.model_dump()}") + + # Get MetTrans configuration + met_trans = ConfigHelper.get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause(filters) + + # Execute main query + sql = text(TemporaryImportQueries.build_main_query(filters.database_name, where_clause)) + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed temporary import partidas") + + movements = [] + + for row in results: + # Skip cancelled if not included + if not filters.include_cancelled and row[3] != 'AC': # C4 - Estatus + continue + + # Provider and client names now come directly from query (C8, C9) + # No need for additional database lookups + logger.info(f"Processing invoice {row[0]}: Proveedor='{row[7]}', VendidoA='{row[8]}', CantidadIE={row[22]}, DescripcionE='{row[20][:50] if row[20] else None}'") + + # Get customs agent information + agente_info = DatabaseHelper.get_customs_agent_info( + db, filters.database_name, row[17] # C18 - AAduanal + ) + + # Get provider and client details including RFC and TaxID + provider_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[15], is_supplier=True + ) if row[15] else {} + + client_info = DatabaseHelper.get_client_info( + db, filters.database_name, row[16], is_supplier=False + ) if row[16] else {} + + # Get customs section name + aduana_nombre = DatabaseHelper.get_aduana_seccion_nombre( + db, filters.database_name, row[37] # C38 - Aduana_Cruce + ) + + # Calculate values (only for main partidas 'P', not subpartidas 'S') + valor_comercial, tipo_cambio = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=row[26], # C27 - ValorImpoME + valor_mn_direct=row[24], # C25 - ValorImpoMN + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C11 - Fecha_Inicio + clave_ped=row[57], # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + + valor_mp_temp_raw, _ = ExchangeRateCalculator.calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + es_subpartida=row[39], # C40 - EsSubPartida + valor_me=float(row[59]) if row[59] else 0.0, + valor_mn_direct=float(row[58]) if row[58] else 0.0, + fecha_pago=row[12], # C13 - Fecha_Pago + fecha_inicio=row[10], # C11 - Fecha_Inicio + clave_ped=row[57], # C58 - TIPOPEDIMENTOTRANSPORTEE + tipo_cambio_partida=row[49], # C50 - TipoCambio + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + met_trans=met_trans + ) + valor_mp_temp_mn = float(valor_mp_temp_raw) + + # Assign the properly converted commercial value directly + valor_comercial_mn = float(valor_comercial) + + # Set peso values based on subpartida flag (allow 'PT', 'MP', etc. but block 'S') + if row[39] != 'S': # C40 - EsSubPartida + peso_neto = float(row[28]) if row[28] else 0.0 # C29 + peso_bruto = float(row[29]) if row[29] else 0.0 # C30 + else: + peso_neto = 0.0 + peso_bruto = 0.0 + + # Get series information + series_info = DatabaseHelper.get_series_info( + db, filters.database_name, row[38], row[43], filters.is_shelter # C39, C44 + ) + + # Get part export symbol + simbolo_ex = None + if row[48]: # C49 - NumParte + simbolo_ex = DatabaseHelper.get_part_export_symbol( + db, filters.database_name, row[48], filters.is_shelter + ) + + # Get pedimento rectification + pedimento_r1 = DatabaseHelper.get_rectification_pedimento( + db, + row[1], # C2 - PedimentoImpo + row[40], # C41 - PedRectifica + filters.is_shelter + ) + + # Get driver badge + num_gaf_uni = DatabaseHelper.get_driver_badge( + db, filters.database_name, row[0] # C1 - FacturaImpo + ) + + # Helper to convert empty strings to None for dates + def none_if_empty(val): + if val == '' or val is None: + return None + return val + + # Helper to convert to string (for Remesa, Advalorem) + def to_str(val): + if val is None or val == '': + return None + if isinstance(val, bool): + return 'P' if val else 'S' # Convert bool to P/S for Advalorem + return str(val) + + logger.error(f"DEBUG ROW: NumParte(17)='{row[17]}', Sector(30)='{row[30]}', Partida {row[43]}, Original Part ID(46)='{row[46]}'") + + # Build detailed movement item + movement = MovementItemDetailed( + Linea=row[43], # C44 - LineaImpo + Factura=row[0], # C1 - FacturaImpo + Pedimento=row[1], # C2 - PedimentoImpo + FechaFactura=parse_yyyymmdd_date(row[2]), # C3 - FechaFactura (convert to datetime) + Estatus=row[3], # C4 - Estatus + ClavePed=row[4], # C5 - ClavePed + TipoMovTemDef='IMTEM', + EsCambioRegimen='N', + Regimen=row[9], # C10 - Regimen + Fecha_Inicio=parse_yyyymmdd_date(row[10]), # C11 - Fecha_Inicio + Fecha_Fin=parse_yyyymmdd_date(row[11]), # C12 - Fecha_Fin + Fecha_Pago=parse_yyyymmdd_date(row[12]), # C13 - Fecha_Pago + Remesa=to_str(row[13]), # C14 - Remesa + Proveedor=row[7], # C8 - Provider name (from JOIN) + RFCProveedor=provider_info.get('rfc'), + ProveedorTaxID=provider_info.get('tax_id'), + VendidoA=row[8], # C9 - Client name (from JOIN) + VendidoARFC=client_info.get('rfc'), + VendidoATaxID=client_info.get('tax_id'), + AgenteAduanal=agente_info.get('name'), + Patente=agente_info.get('license'), + NumParte=row[48], # C49 - Part Number (from JOIN) + DescripcionE=StringHelper.clean_text(row[20]), # C21 + DescripcionI=StringHelper.clean_text(row[21]), # C22 + CantidadIE=float(row[22]) if row[22] else 0.0, # C23 + UniMed=row[23], # C24 + ValorComercialMN=valor_comercial_mn, + ValorMPTemp=valor_mp_temp_mn, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[30], # C31 - OrdenCompra + FraccionArancelaria=row[31], # C32 - Fraccion + Preferencia=row[32], # C33 - TipoFraccion + Sector=row[34], # C35 - Sector (from COALESCE) + PaisOrigen=row[36], # C37 - PaisOrigen + Aduana=aduana_nombre, + Advalorem=to_str(row[39]), # C40 - EsSubPartida (convert bool to str) + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[41], # C42 - EDocument + NumOperacionVU=row[42], # C43 - NumOperacionVU + Series=series_info, + Marca=StringHelper.clean_text(row[44]), # C45 + Modelo=StringHelper.clean_text(row[45]), # C46 + FraccionAmericana=row[46], # C47 - FraccionAme + ECCN=row[47], # C48 - ECCN + SimboloEx=simbolo_ex, + FechaEmision=parse_yyyymmdd_date(row[50]), # C51 - FechaEmision + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[51], # C52 - UsuarioCap + UsuarioAcr=row[52], # C53 - UsuarioAct + Transportista=row[53], # C54 - Carrier ID + NumCaja=row[54], # C55 - Transport num + Pedimento18=row[55], # C56 - Pedimento18 + AduanaCru=row[37], # C38 - Aduana_Cruce + Lote=row[56] # C57 - LOTE + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed temporary import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed temporary import movements: {e}", exc_info=True) + raise + + def _build_where_clause(self, filters: "ImportTemporaryFilter") -> str: + """Build WHERE clause for temporary imports query using PostgreSQL tables.""" + where_conditions = [] + + # STRICT SEPARATION: Only temporary imports + where_conditions.append("ih.operation_type = 'imp'") + # ALWAYS filter by specific invoice_type to avoid duplication with Definitive service + where_conditions.append("ih.invoice_type IN ('TEM', 'MATTEM')") + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"ih.invoice_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND ih.invoice_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + else: + where_conditions.append(f"pd.payment_date >= TO_DATE('{filters.start_date}', 'YYYYMMDD') AND pd.payment_date <= TO_DATE('{filters.end_date}', 'YYYYMMDD')") + + # Note: Status filter applied at Python level after CASE WHEN in SELECT + # because is_updated doesn't directly represent AC/NA status + + # Provider filter + if filters.provider: + where_conditions.append(f"cmp.provider_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.provider}')") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"cmp.sold_to_id IN (SELECT id FROM a76.clients_and_providers WHERE name = '{filters.buyer}')") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"ped.pedimento_code = '{filters.pedimento_code}'") + + return " AND ".join(where_conditions) if where_conditions else "1=1" + + def _calculate_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """Calculate totals for main partidas only using PostgreSQL. + + Only sums partidas where is_subpartida is false (equivalent to EsSubpartida = 'P' in Clarion). + """ + sql = text(""" + SELECT + COALESCE(SUM(lf.value_usd), 0), + COALESCE(SUM(lf.value_mxn), 0) + FROM a76.item_line_financials lf + JOIN a76.item_lines il ON il.id = lf.item_line_id + WHERE il.invoice_id = :consecutivo + AND COALESCE(il.is_subpartida, false) = false + """) + + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + total_me = float(result[0]) if result and result[0] is not None else 0.0 + total_mn = float(result[1]) if result and result[1] is not None else 0.0 + + return total_me, total_mn diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py b/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py new file mode 100644 index 00000000..66c888df --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/services_old.py @@ -0,0 +1,2115 @@ +import logging +from sqlalchemy import text +from sqlalchemy.orm import Session +import configparser +import os +from typing import List, Optional +from datetime import datetime +from decimal import Decimal + +from .schemas import ( + ImportTemporaryFilter, + ImportDefinitiveFilter, + ImportRepairFilter, + MovementItem, + MovementItemDetailed, + RangeType +) + +logger = logging.getLogger(__name__) + + +class MovementService: + """ + Service for handling movement operations, particularly temporary import movements. + Integrates with legacy SQL Server databases for data extraction. + """ + + def _get_met_trans_config(self) -> int: + """ + Read MetTrans configuration from Scaii.ini file. + + Returns: + MetTrans value (0 or 1) + """ + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + return met_trans + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + return 0 + + def _build_where_clause_temporary(self, filters: ImportTemporaryFilter) -> tuple: + """ + Build WHERE clause and parameters for temporary imports query. + + Returns: + Tuple of (where_string, params_dict) + """ + where_clauses = [] + params = {} + + # Date range filter + if filters.range_type.value == 'FF': + where_clauses.append("EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date") + else: + where_clauses.append("EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date") + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + # Status filter + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + # Buyer filter + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + # Pedimento code filter + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + return " AND ".join(where_clauses), params + + def _build_where_clause_definitive(self, filters: ImportDefinitiveFilter) -> str: + """ + Build WHERE clause for definitive imports query. + + Returns: + WHERE clause string + """ + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + + return " AND ".join(where_conditions) + + def _calculate_exchange_rate_and_value( + self, + db: Session, + db_name: str, + valor_me: float, + valor_mn: float, + tipo_cambio_db: float, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + currency_type: str, + exchange_rate_type: str, + is_shelter: bool, + use_transport_method: bool, + met_trans: int + ) -> tuple: + """ + Unified method to calculate exchange rate and commercial value. + Eliminates duplicated logic across temporary and definitive imports. + + Args: + db: Database session + db_name: Database name + valor_me: Value in foreign currency + valor_mn: Value in local currency + tipo_cambio_db: Exchange rate from database + fecha_pago: Payment date + fecha_inicio: Start date + tipo_pedimento: Pedimento type + currency_type: "ME" or "MN" + exchange_rate_type: "FP" or "FF" + is_shelter: Shelter company flag + use_transport_method: Use transport method flag + met_trans: MetTrans value from config + + Returns: + Tuple of (valor_comercial_mn, tipo_cambio) + """ + # Foreign currency case - simpler + if currency_type == "ME": + valor_comercial = valor_me + tipo_cambio = tipo_cambio_db + + # Try to get exchange rate if using payment date + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = self._get_fecha_tipo_cambio( + fecha_pago, fecha_inicio, tipo_pedimento, use_transport_method, met_trans + ) + tc_value = self._obtener_tipo_cambio(db, db_name, fecha_tc, is_shelter) + if tc_value: + tipo_cambio = tc_value + + return valor_comercial, tipo_cambio + + # Local currency case - more complex + if exchange_rate_type == "FP" and fecha_pago: + fecha_tc = self._get_fecha_tipo_cambio( + fecha_pago, fecha_inicio, tipo_pedimento, use_transport_method, met_trans + ) + tc_value = self._obtener_tipo_cambio(db, db_name, fecha_tc, is_shelter) + + if tc_value: + return valor_me * tc_value, tc_value + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using DB values") + return valor_mn, tipo_cambio_db + else: + return valor_mn, tipo_cambio_db + + def _get_fecha_tipo_cambio( + self, + fecha_pago, + fecha_inicio, + tipo_pedimento: str, + use_transport_method: bool, + met_trans: int + ): + """ + Determine which date to use for exchange rate lookup. + + Returns: + Date to use for exchange rate + """ + fecha = fecha_pago + if use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha = fecha_inicio + return fecha + + def get_temporary_import_movements( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItem]: + """ + Retrieve temporary import movements from legacy database. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching temporary import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause dynamically based on filters + where_clauses = [] + params = {} + + # Date range filter + if filters.range_type == 'FF': + where_clauses.append( + "EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date" + ) + else: + where_clauses.append( + "EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date" + ) + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + # Status filter + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + # Buyer filter + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + # Pedimento code filter + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + where_str = " AND ".join(where_clauses) + db_name = filters.database_name + + logger.debug(f"WHERE clause: {where_str}") + logger.debug(f"Query params: {params}") + + # Main Query (using shared query builder) + sql_query = text(self._build_main_query(db_name, where_str)) + + try: + result = db.execute(sql_query, params) + rows = result.fetchall() + logger.info(f"Query returned {len(rows)} rows") + except Exception as e: + logger.error(f"Error executing main query: {e}") + raise Exception(f"Database query failed: {str(e)}") + + movements = [] + processed_facturas = set() + + for row in rows: + if filters.report_type == 'Normal': + C1_Factura = row[0] + + if C1_Factura in processed_facturas: + continue + + qcsv_ie = {} + processed_facturas.add(C1_Factura) + + C39_Consecutivo = row[38] + + # Totalize Items (sum values for main partidas only) + sql_total = text(f""" + SELECT + COALESCE(SUM(EqiPim.ValorImpoME), 0), + COALESCE(SUM(EqiPim.ValorImpoMN), 0) + FROM [{db_name}].dbo.QEqiMaq EqiPim + WHERE EqiPim.Consecutivo = :consecutivo + AND EqiPim.EsSubpartida = 'P' + """) + + try: + res_total = db.execute(sql_total, {"consecutivo": C39_Consecutivo}).fetchone() + val_total_me = float(res_total[0]) if res_total and res_total[0] is not None else 0.0 + val_total_mn = float(res_total[1]) if res_total and res_total[1] is not None else 0.0 + except Exception as e: + logger.warning(f"Error calculating totals for consecutivo {C39_Consecutivo}: {e}") + val_total_me = 0.0 + val_total_mn = 0.0 + + qcsv_ie['Factura'] = row[0] + qcsv_ie['Pedimento'] = row[1] + qcsv_ie['FechaFactura'] = row[2] + qcsv_ie['Estatus'] = row[3] + qcsv_ie['ClavePed'] = row[4] + qcsv_ie['TipoMovTemDef'] = 'IMTEM' + qcsv_ie['EsCambioRegimen'] = 'N' + + row_c13 = row[12] # Fecha_Pago + row_c11 = row[10] # Fecha_Inicio + row_c58 = row[57] # TIPOPEDIMENTOTRANSPORTEE + row_c50 = row[49] # TipoCambio + row_c41 = row[40] # PedRectifica + row_c2 = row[1] # PedimentoImpo + + calculated_tc = row_c50 + + # Calculate values based on currency type + if filters.currency_type == 'ME': + qcsv_ie['ValorMPTemp'] = val_total_me + qcsv_ie['ValorComercialMN'] = val_total_me + + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio( + db, db_name, row_c13, row_c11, row_c58, met_trans + ) + qcsv_ie['TipoCambio'] = calculated_tc if calculated_tc > 0 else row_c50 + else: + qcsv_ie['TipoCambio'] = row_c50 + else: + if filters.is_shelter: + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio_mn(db, db_name, row_c13, row_c11, row_c58, met_trans) + qcsv_ie['ValorMPTemp'] = val_total_me * calculated_tc + qcsv_ie['ValorComercialMN'] = val_total_me * calculated_tc + qcsv_ie['TipoCambio'] = calculated_tc + else: + qcsv_ie['ValorMPTemp'] = val_total_mn + qcsv_ie['ValorComercialMN'] = val_total_mn + qcsv_ie['TipoCambio'] = row_c50 + else: + if filters.exchange_rate_type == 'FP' and row_c13: + calculated_tc = self._obtener_tipo_cambio(db, db_name, row_c13, row_c11, row_c58, met_trans) + qcsv_ie['ValorMPTemp'] = val_total_me * calculated_tc + qcsv_ie['ValorComercialMN'] = val_total_me * calculated_tc + qcsv_ie['TipoCambio'] = calculated_tc + else: + qcsv_ie['ValorMPTemp'] = val_total_mn + qcsv_ie['ValorComercialMN'] = val_total_mn + qcsv_ie['TipoCambio'] = row_c50 + + qcsv_ie['ValorAgre'] = 0.0 + qcsv_ie['TipoExpo'] = '' + + if filters.is_shelter: + qcsv_ie['PedimentoR1'] = row_c41 + else: + qcsv_ie['PedimentoR1'] = self._buscar_rectificacion(db, db_name, row_c2, row_c41) + + qcsv_ie['EDocument'] = row[41] + qcsv_ie['NumOperacionVU'] = row[42] + qcsv_ie['BaseDeDatos'] = db_name + + # Get driver badge number (gafete) + sql_gafete = text(f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + try: + res_gafete = db.execute(sql_gafete, {"factura": row[0]}).fetchone() + qcsv_ie['NumGafUni'] = res_gafete[0] if res_gafete and res_gafete[0] else None + except Exception as e: + logger.debug(f"Could not retrieve badge for invoice {row[0]}: {e}") + qcsv_ie['NumGafUni'] = None + + qcsv_ie['UsuarioCap'] = row[51] + qcsv_ie['UsuarioAcr'] = row[52] + qcsv_ie['Fecha_Pago'] = row[12] + qcsv_ie['NumCaja'] = row[54] + qcsv_ie['Pedimento18'] = row[55] + qcsv_ie['AduanaCru'] = row[37] + qcsv_ie['Lote'] = row[56] + + movements.append(MovementItem(**qcsv_ie)) + + return movements + + def _obtener_tipo_cambio( + self, + db: Session, + db_name: str, + fecha, + is_shelter: bool + ) -> Optional[float]: + """ + Get exchange rate for the given date. + Simplified version that works with both shelter and non-shelter logic. + + Args: + db: Database session + db_name: Legacy database name + fecha: Date for exchange rate lookup + is_shelter: Shelter company flag (currently not used but kept for compatibility) + + Returns: + Exchange rate as float, or None if not found + """ + if not fecha: + return None + + try: + sql_tc = text(f""" + SELECT TOP 1 Valor + FROM [{db_name}].dbo.GTipoCambio + WHERE Fecha = :fecha + ORDER BY Fecha DESC + """) + res = db.execute(sql_tc, {"fecha": fecha}).fetchone() + if res and res[0]: + return float(res[0]) + else: + logger.warning(f"Exchange rate not found for date {fecha}") + return None + except Exception as e: + logger.error(f"Error fetching exchange rate for date {fecha}: {e}") + return None + + def _buscar_rectificacion( + self, + pedimento: str, + ped_rectifica: Optional[str] + ) -> Optional[str]: + """ + Search for pedimento rectification. + Simplified version - returns the rectification value from database. + + Args: + pedimento: Original pedimento number + ped_rectifica: Rectification pedimento from query + + Returns: + Rectification pedimento number or None + """ + # TODO: Implement full rectification search logic if needed + # For now, returning the value from the query + return ped_rectifica + + def get_temporary_import_movements_detailed( + self, + db: Session, + filters: ImportTemporaryFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed temporary import movements (line by line) from legacy database. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of detailed movement items (one per line/partida) + """ + logger.info(f"Fetching DETAILED temporary import movements with filters: {filters.model_dump()}") + + # Read INI configuration + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause (same as normal report) + where_clauses = [] + params = {} + + if filters.range_type == 'FF': + where_clauses.append( + "EqiFim.FechaFactura >= :start_date AND EqiFim.FechaFactura <= :end_date" + ) + else: + where_clauses.append( + "EqiPed.Fecha_Pago >= :start_date AND EqiPed.Fecha_Pago <= :end_date" + ) + + params['start_date'] = filters.start_date + params['end_date'] = filters.end_date + + if not filters.include_cancelled: + where_clauses.append("EqiFim.Estatus = 'AC'") + + if filters.provider: + where_clauses.append("EqiFim.Proveedor = :provider") + params['provider'] = filters.provider + + if filters.buyer: + where_clauses.append("EqiFim.VendidoA = :buyer") + params['buyer'] = filters.buyer + + if filters.pedimento_code: + where_clauses.append("EqiPed.ClavePed = :pedimento_code") + params['pedimento_code'] = filters.pedimento_code + + where_str = " AND ".join(where_clauses) + db_name = filters.database_name + + logger.debug(f"WHERE clause: {where_str}") + logger.debug(f"Query params: {params}") + + # Same main query as normal report + sql_query = text(self._build_main_query(db_name, where_str)) + + try: + result = db.execute(sql_query, params) + rows = result.fetchall() + logger.info(f"Query returned {len(rows)} rows for detailed processing") + except Exception as e: + logger.error(f"Error executing main query: {e}") + raise Exception(f"Database query failed: {str(e)}") + + movements = [] + + # Process each row individually (detailed mode) + for row in rows: + item = {} + + # Basic invoice info + item['Linea'] = row[43] # C44 - LineaImpo + item['Factura'] = row[0] # C1 + item['Pedimento'] = row[1] # C2 + item['FechaFactura'] = row[2] # C3 + item['Estatus'] = row[3] # C4 + item['ClavePed'] = row[4] # C5 + item['TipoMovTemDef'] = 'IMTEM' + item['EsCambioRegimen'] = 'N' + item['Regimen'] = row[9] # C10 + item['Fecha_Inicio'] = row[10] # C11 + item['Fecha_Fin'] = row[11] # C12 + item['Fecha_Pago'] = row[12] # C13 + item['Remesa'] = row[13] # C14 + + # Get provider information + provider_code = row[15] # C16 - Proveedor + provider_info = self._get_client_provider_info(db, db_name, provider_code, filters.is_shelter) + item['Proveedor'] = provider_info.get('nombre') + item['RFCProveedor'] = provider_info.get('rfc') + item['ProveedorTaxID'] = provider_info.get('tax_id') + + # Get buyer information + buyer_code = row[16] # C17 - VendidoA + buyer_info = self._get_client_buyer_info(db, db_name, buyer_code, filters.is_shelter) + item['VendidoA'] = buyer_info.get('nombre') + item['VendidoARFC'] = buyer_info.get('rfc') + item['VendidoATaxID'] = buyer_info.get('tax_id') + + # Get customs broker info + customs_broker_code = row[17] # C18 - AAduanal + broker_info = self._get_customs_broker_info(db, db_name, customs_broker_code) + item['AgenteAduanal'] = broker_info.get('nombre') + item['Patente'] = broker_info.get('patente') + + # Item details + item['NumParte'] = row[19] # C20 - Clase (NumParte) + item['DescripcionE'] = self._clean_text(row[20]) # C21 - Already cleaned in query + item['DescripcionI'] = self._clean_text(row[21]) # C22 - Already cleaned in query + item['CantidadIE'] = float(row[22]) if row[22] else 0.0 # C23 + item['UniMed'] = row[23] # C24 + + # Values and exchange rate (only for main partidas, not subpartidas) + if row[39] == 'P': # C40 - EsSubPartida == 'P' + # Calculate value based on currency type + if filters.currency_type == 'MN': + if filters.is_shelter: + if filters.exchange_rate_type == 'FP' and row[12]: # C13 - Fecha_Pago + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['ValorComercialMN'] = float(row[26]) * tc if row[26] else 0.0 # C27 * TC + item['TipoCambio'] = tc + else: + item['ValorComercialMN'] = float(row[24]) if row[24] else 0.0 # C25 + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + else: + if filters.exchange_rate_type == 'FP' and row[12]: + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['ValorComercialMN'] = float(row[26]) * tc if row[26] else 0.0 # C27 * TC + item['TipoCambio'] = tc + else: + item['ValorComercialMN'] = float(row[24]) if row[24] else 0.0 # C25 + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + elif filters.currency_type == 'ME': + item['ValorComercialMN'] = float(row[26]) if row[26] else 0.0 # C27 + if filters.exchange_rate_type == 'FP' and row[12]: + tc = self._obtener_tipo_cambio(db, db_name, row[12], row[10], row[57], met_trans) + item['TipoCambio'] = tc if tc > 0 else float(row[49]) if row[49] else 0.0 + else: + item['TipoCambio'] = float(row[49]) if row[49] else 0.0 # C50 + + item['PesoNeto'] = float(row[28]) if row[28] else 0.0 # C29 + item['PesoBruto'] = float(row[29]) if row[29] else 0.0 # C30 + elif row[39] == 'S': # Subpartida + item['ValorComercialMN'] = 0.0 + item['PesoNeto'] = 0.0 + item['PesoBruto'] = 0.0 + item['TipoCambio'] = 0.0 + + # Additional fields + item['OrdenCompraVenta'] = row[30] # C31 + item['FraccionArancelaria'] = row[31] # C32 + item['Preferencia'] = row[32] # C33 + item['Sector'] = row[34] # C35 + item['PaisOrigen'] = row[36] # C37 + + # Get customs office name + aduana_code = row[37] # C38 - Aduana_Cruce + aduana_name = self._get_customs_office_name(db, db_name, aduana_code) + item['Aduana'] = aduana_name + + item['Advalorem'] = row[39] # C40 + item['TipoExpo'] = '' + + # Rectification + if filters.is_shelter: + item['PedimentoR1'] = row[40] # C41 + else: + item['PedimentoR1'] = self._buscar_rectificacion(db, db_name, row[1], row[40]) + + item['EDocument'] = row[41] # C42 + item['NumOperacionVU'] = row[42] # C43 + + # Get series information + consecutivo = row[38] # C39 + linea_impo = row[43] # C44 + series_info = self._get_series_info(db, db_name, consecutivo, linea_impo, filters.is_shelter) + item['Series'] = series_info + + item['Marca'] = row[44] # C45 + item['Modelo'] = row[45] # C46 + item['FraccionAmericana'] = row[46] # C47 + item['ECCN'] = row[47] # C48 + + # Get export symbol from parts + num_parte = row[48] # C49 + if num_parte: + simbolo_ex = self._get_part_export_symbol(db, db_name, num_parte, filters.is_shelter) + item['SimboloEx'] = simbolo_ex + else: + item['SimboloEx'] = None + + item['FechaEmision'] = row[50] # C51 + item['BaseDeDatos'] = db_name + + # Get driver badge + factura = row[0] # C1 + try: + sql_gafete = text(f""" + SELECT TOP 1 NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImp + ON QFacImp.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + res_gafete = db.execute(sql_gafete, {"factura": factura}).fetchone() + item['NumGafUni'] = res_gafete[0] if res_gafete and res_gafete[0] else None + except Exception as e: + logger.debug(f"Could not retrieve badge for invoice {factura}: {e}") + item['NumGafUni'] = None + + item['UsuarioCap'] = row[51] # C52 + item['UsuarioAcr'] = row[52] # C53 + item['Transportista'] = row[53] # C54 + item['NumCaja'] = row[54] # C55 + item['Pedimento18'] = row[55] # C56 + item['AduanaCru'] = row[37] # C38 + item['Lote'] = row[56] # C57 + + movements.append(MovementItemDetailed(**item)) + + logger.info(f"Processed {len(movements)} detailed movement items") + return movements + + def _build_main_query(self, db_name: str, where_str: str) -> str: + """Build the main SQL query for fetching invoice data""" + return f""" + SELECT + EqiFim.FacturaImpo AS C1, + EqiFim.PedimentoImpo AS C2, + EqiFim.FechaFactura AS C3, + EqiFim.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiFim.ValorImpoME AS C6, + EqiFim.ValorImpoMN AS C7, + EqiFim.Proveedor AS C8, + EqiFim.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFim.Remesa AS C14, + EqiFim.TipoCambio AS C15, + EqiFim.Proveedor AS C16, + EqiFim.VendidoA AS C17, + EqiFim.AAduanal AS C18, + '' AS C19, + EqiPim.Clase AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.DescripcionE, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(ClaAct.DescripcionI, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C22, + EqiPim.CantImpo AS C23, + EqiPim.UnidadMedida AS C24, + EqiPim.ValorImpoMN AS C25, + EqiPim.ValorAduanasMN AS C26, + EqiPim.ValorImpoME AS C27, + EqiPim.ValorAduanasME AS C28, + EqiPim.PesoNeto AS C29, + EqiPim.PesoBruto AS C30, + EqiPim.OrdenCompra AS C31, + EqiPim.Fraccion AS C32, + EqiPim.TipoFraccion AS C33, + EqiPim.AdvImpo AS C34, + EqiPim.Sector AS C35, + EqiPim.MontoIgi AS C36, + EqiPim.PaisOrigen AS C37, + EqiPed.Aduana_Cruce AS C38, + EqiFim.Consecutivo AS C39, + EqiPim.EsSubPartida AS C40, + EqiPed.PedRectifica AS C41, + EqiFim.EDocument AS C42, + EqiFim.NumOperacionVU AS C43, + EqiPim.LineaImpo AS C44, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.Marca, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(EqiPim.Modelo, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C46, + ClaAct.FraccionAme AS C47, + ClaAct.ECCN AS C48, + EqiPim.NumParte AS C49, + EqiFim.TipoCambio AS C50, + EqiFim.FechaEmision AS C51, + EqiFim.UsuarioCap AS C52, + EqiFim.UsuarioAct AS C53, + EqiFim.Transportista AS C54, + EqiFim.Transporte + ' ' + EqiFim.NumTrasporte AS C55, + EqiPed.Pedimento18 AS C56, + EqiPim.LOTE AS C57, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C58 + FROM [{db_name}].dbo.QFacImp EqiFim + LEFT JOIN [{db_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFim.PedimentoImpo + LEFT JOIN [{db_name}].dbo.QEqiMaq EqiPim + ON EqiPim.Consecutivo = EqiFim.Consecutivo + LEFT JOIN [{db_name}].dbo.QClaAct ClaAct + ON ClaAct.Clase = EqiPim.Clase + WHERE {where_str} + """ + + def _clean_text(self, text: Optional[str]) -> Optional[str]: + """Clean text by removing special characters""" + if not text: + return None + return text.strip() + + def _get_client_provider_info(self, db: Session, db_name: str, client_code: str, is_shelter: bool) -> dict: + """Get provider/client information""" + if not client_code: + return {"nombre": None, "rfc": None, "tax_id": None} + + try: + sql = text(f""" + SELECT TOP 1 Nombre, RFC, TaxID + FROM [{db_name}].dbo.GClientesPro + WHERE Cliente = :cliente + """) + result = db.execute(sql, {"cliente": client_code}).fetchone() + + if result: + return { + "nombre": self._clean_text(result[0]), + "rfc": result[1], + "tax_id": result[2] + } + except Exception as e: + logger.warning(f"Error fetching provider info for {client_code}: {e}") + + return {"nombre": None, "rfc": None, "tax_id": None} + + def _get_client_buyer_info(self, db: Session, db_name: str, client_code: str, is_shelter: bool) -> dict: + """Get buyer information (same structure as provider)""" + return self._get_client_provider_info(db, db_name, client_code, is_shelter) + + def _get_customs_broker_info(self, db: Session, db_name: str, broker_code: str) -> dict: + """Get customs broker information""" + if not broker_code: + return {"nombre": None, "patente": None} + + try: + sql = text(f""" + SELECT TOP 1 Nombre, Patente + FROM [{db_name}].dbo.GAAduanal + WHERE ClaveAA = :clave + """) + result = db.execute(sql, {"clave": broker_code}).fetchone() + + if result: + return { + "nombre": result[0], + "patente": result[1] + } + except Exception as e: + logger.warning(f"Error fetching customs broker info for {broker_code}: {e}") + + return {"nombre": None, "patente": None} + + def _get_customs_office_name(self, db: Session, db_name: str, aduana_code: str) -> Optional[str]: + """Get customs office name""" + if not aduana_code: + return None + + try: + sql = text(f""" + SELECT TOP 1 REPLACE(REPLACE(REPLACE(REPLACE(Nombre, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') + FROM [{db_name}].dbo.GAduanaSec + WHERE AduanaSeccion = :aduana + """) + result = db.execute(sql, {"aduana": aduana_code}).fetchone() + return result[0] if result else None + except Exception as e: + logger.warning(f"Error fetching customs office name for {aduana_code}: {e}") + return None + + def _get_series_info(self, db: Session, db_name: str, consecutivo: str, linea_impo: str, is_shelter: bool) -> Optional[str]: + """Get series information for an item""" + if not consecutivo or not linea_impo: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpo + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY RenImpo + """) + result = db.execute(sql, {"consecutivo": consecutivo, "linea": linea_impo}).fetchall() + + if not result: + return None + + # Build series string + series_parts = [] + for idx, row in enumerate(result, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_parts.append(serie_str) + + return " | ".join(series_parts) if series_parts else None + + except Exception as e: + logger.warning(f"Error fetching series for {consecutivo}/{linea_impo}: {e}") + return None + + def _get_part_export_symbol(self, db: Session, db_name: str, num_parte: str, is_shelter: bool) -> Optional[str]: + """Get export symbol/license for a part number""" + if not num_parte: + return None + + try: + sql = text(f""" + SELECT TOP 1 SimboloExcLic + FROM [{db_name}].dbo.QPartes + WHERE NumParte = :num_parte + """) + result = db.execute(sql, {"num_parte": num_parte}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching export symbol for part {num_parte}: {e}") + return None + + def get_definitive_import_movements( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItem]: + """ + Retrieve definitive import movements from legacy database (LLENADODEFINITIVO - NORMAL). + Aggregates movements by invoice number. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching definitive import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: # FP + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Movement type filter + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + # If ALL, no filter added + + where_clause = " AND ".join(where_conditions) + + # Build main SQL query + sql_query = text(f""" + SELECT + EqiFid.FacturaImpoDef AS C1, + EqiFid.PedimentoImpoDef AS C2, + EqiFid.FechaFactura AS C3, + EqiFid.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiFid.ValorImpoME AS C6, + EqiFid.ValorImpoMN AS C7, + EqiFid.Proveedor AS C8, + EqiFid.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFid.Remesa AS C14, + EqiFid.TipoCambio AS C15, + EqiFid.AAduanal AS C18, + EqiFid.Consecutivo AS C40, + EqiPed.PedRectifica AS C42, + EqiFid.EDocument AS C43, + EqiFid.NumOperacionVU AS C44, + EqiFid.TipoCambio AS C51, + EqiFid.FechaEmision AS C52, + EqiFid.UsuarioCap AS C53, + EqiFid.UsuarioAct AS C54, + EqiFid.Transportista AS C55, + EqiFid.Transporte + ' ' + EqiFid.NumTrasporte AS C56, + EqiPed.Pedimento18 AS C57, + EqiPed.Aduana_Cruce AS C38, + EqiFid.ProvImpoDefCR AS C39, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C59 + FROM [{filters.database_name}].dbo.QFacImpDef EqiFid + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFid.PedimentoImpoDef + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements_dict = {} + + for row in result: + factura = row[0] # C1 + prov_impo_def_cr = row[28] # C39 + + # Determine movement type + tipo_mov = "COMEX" if prov_impo_def_cr == 'P' else "IMPDF" + + # Use factura + tipo_mov as key + key = (factura, tipo_mov) + + # If already exists, skip (we only want one entry per invoice in Normal mode) + if key not in movements_dict: + consecutivo = row[16] # C40 + fecha_pago = row[12] # C13 + tipo_pedimento = row[29] # C59 + fecha_inicio = row[10] # C11 + + # Calculate total values for this invoice + valor_me, valor_mn = self._calculate_definitive_totals( + db, filters.database_name, consecutivo + ) + + # Calculate exchange rate and values + tipo_cambio = row[20] # C51 + valor_mp_temp = 0.0 + valor_comercial_mn = 0.0 + + if filters.currency_type.value == "ME": + valor_mp_temp = float(valor_me or 0) + valor_comercial_mn = float(valor_me or 0) + tipo_cambio = float(tipo_cambio or 1.0) + else: # MN + if filters.is_shelter: + # Shelter logic with exchange rate calculation + if filters.exchange_rate_type.value == "FP" and fecha_pago: + # Check if special transport method logic applies + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_mp_temp = float(valor_me or 0) * tc_value + valor_comercial_mn = float(valor_me or 0) * tc_value + tipo_cambio = tc_value + else: + logger.warning(f"Exchange rate not found for date {fecha_tc}, using values from DB") + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + # Non-shelter logic + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_mp_temp = float(valor_me or 0) * tc_value + valor_comercial_mn = float(valor_me or 0) * tc_value + tipo_cambio = tc_value + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + else: + valor_mp_temp = float(valor_mn or 0) + valor_comercial_mn = float(valor_mn or 0) + + # Get driver badge number + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Get rectification pedimento + pedimento = row[1] # C2 + ped_rectifica = row[17] # C42 + pedimento_r1 = self._buscar_rectificacion(pedimento, ped_rectifica) + + # Create movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_mp_temp, + ValorComercialMN=valor_comercial_mn, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C43 + NumOperacionVU=row[19], # C44 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C53 + UsuarioAcr=row[23], # C54 + Fecha_Pago=row[12], # C13 + NumCaja=row[25], # C56 + Pedimento18=row[26], # C57 + AduanaCru=row[27], # C38 + Lote=None # Lote comes from EpiDef table, not available in main query + ) + + movements_dict[key] = movement + + movements = list(movements_dict.values()) + logger.info(f"Successfully retrieved {len(movements)} definitive import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching definitive import movements: {e}", exc_info=True) + raise + + def _calculate_definitive_totals(self, db: Session, db_name: str, consecutivo: int) -> tuple: + """ + Calculate total values for a definitive import invoice. + Sums up all partidas (items) excluding sub-partidas. + + Returns: + tuple: (total_valor_me, total_valor_mn) + """ + try: + sql = text(f""" + SELECT SUM(EqiPdf.ValorME), SUM(EqiPdf.ValorMN) + FROM [{db_name}].dbo.QEqiDef EqiPdf + WHERE EqiPdf.Consecutivo = :consecutivo + AND EqiPdf.EsSubpartida = 'P' + """) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_driver_badge(self, db: Session, db_name: str, factura: str) -> Optional[str]: + """Get driver's unique badge number (NUMGAFETEUNICO) for a definitive import invoice""" + if not factura: + return None + + try: + sql = text(f""" + SELECT NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImpDef + ON QFacImpDef.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpoDef = :factura + """) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for invoice {factura}: {e}") + return None + + def get_definitive_import_movements_detailed( + self, + db: Session, + filters: ImportDefinitiveFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed definitive import movements from legacy database (LLENADODEFINITIVO - DETALLADO). + Returns each line/partida as a separate record with full details. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of detailed movement items (one per partida/line) + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching DETAILED definitive import movements with filters: {filters.model_dump()}") + + # Read INI configuration for exchange rate logic + met_trans = 0 + try: + config = configparser.ConfigParser() + config.read('Scaii.ini') + met_trans = config.getint('METTRANS', 'TipoCambio', fallback=0) + logger.debug(f"INI met_trans value: {met_trans}") + except Exception as e: + logger.warning(f"Could not read Scaii.ini, using default met_trans=0: {e}") + + # Build WHERE clause (same as normal mode) + where_conditions = [] + + if filters.range_type.value == "FF": + where_conditions.append(f"EqiFid.FechaFactura >= '{filters.start_date}' AND EqiFid.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + if not filters.include_cancelled: + where_conditions.append("EqiFid.Estatus = 'AC'") + + if filters.provider: + where_conditions.append(f"EqiFid.Proveedor = '{filters.provider}'") + + if filters.buyer: + where_conditions.append(f"EqiFid.VendidoA = '{filters.buyer}'") + + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + if filters.movement_type.value == "COMEX": + where_conditions.append("EqiFid.ProvImpoDefCR = 'P'") + elif filters.movement_type.value == "IMPDF": + where_conditions.append("EqiFid.ProvImpoDefCR != 'P'") + + where_clause = " AND ".join(where_conditions) + + # Build detailed SQL query (includes partida/line details) + sql_query = text(f""" + SELECT + EqiFid.FacturaImpoDef AS C1, + EqiFid.PedimentoImpoDef AS C2, + EqiFid.FechaFactura AS C3, + EqiFid.Estatus AS C4, + EqiPed.ClavePed AS C5, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + EqiFid.Remesa AS C14, + EqiFid.TipoCambio AS C15, + EqiFid.Proveedor AS C16, + EqiFid.VendidoA AS C17, + EqiFid.AAduanal AS C18, + EpiDef.Clase AS C20, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.DescripcionE, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C21, + REPLACE(REPLACE(REPLACE(REPLACE(EqiCla.DescripcionI, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C22, + EpiDef.CantImpoDef AS C23, + EpiDef.UnidadMedida AS C24, + EpiDef.ValorMN AS C25, + EpiDef.ValorME AS C27, + EpiDef.PesoNeto AS C29, + EpiDef.PesoBruto AS C30, + EpiDef.OrdenCompra AS C31, + EpiDef.Fraccion AS C32, + EpiDef.TipoFraccion AS C33, + EpiDef.Sector AS C35, + EpiDef.PaisOrigen AS C37, + EqiPed.Aduana_Cruce AS C38, + EqiFid.ProvImpoDefCR AS C39, + EqiFid.Consecutivo AS C40, + EpiDef.EsSubPartida AS C41, + EqiPed.PedRectifica AS C42, + EqiFid.EDocument AS C43, + EqiFid.NumOperacionVU AS C44, + EpiDef.LineaImpoDef AS C45, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.Marca, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C46, + REPLACE(REPLACE(REPLACE(REPLACE(EpiDef.Modelo, CHAR(44), ' '), CHAR(9), ' '), CHAR(10), ' '), CHAR(13), ' ') AS C47, + EqiCla.FraccionAme AS C48, + EqiCla.ECCN AS C49, + EpiDef.NumParte AS C50, + EqiFid.TipoCambio AS C51, + EqiFid.FechaEmision AS C52, + EqiFid.UsuarioCap AS C53, + EqiFid.UsuarioAct AS C54, + EqiFid.Transportista AS C55, + EqiFid.Transporte + ' ' + EqiFid.NumTrasporte AS C56, + EqiPed.Pedimento18 AS C57, + EpiDef.Lote AS C58, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C59 + FROM [{filters.database_name}].dbo.QFacImpDef EqiFid + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = EqiFid.PedimentoImpoDef + LEFT JOIN [{filters.database_name}].dbo.QEqiDef EpiDef + ON EpiDef.Consecutivo = EqiFid.Consecutivo + LEFT JOIN [{filters.database_name}].dbo.QClaAct EqiCla + ON EqiCla.Clase = EpiDef.Clase + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements = [] + + for row in result: + linea = row[31] # C45 + factura = row[0] # C1 + pedimento = row[1] # C2 + prov_impo_def_cr = row[25] # C39 + es_subpartida = row[27] # C41 + fecha_pago = row[8] # C13 + tipo_pedimento = row[44] # C59 + fecha_inicio = row[6] # C11 + consecutivo = row[26] # C40 + + # Determine movement type + tipo_mov = "COMEX" if prov_impo_def_cr == 'P' else "IMPDF" + + # Get provider info + proveedor_info = self._get_client_provider_info( + db, filters.database_name, row[11], filters.is_shelter # C16 + ) + + # Get buyer info + buyer_info = self._get_client_buyer_info( + db, filters.database_name, row[12], filters.is_shelter # C17 + ) + + # Get customs broker info + broker_info = self._get_customs_broker_info( + db, filters.database_name, row[13] # C18 + ) + + # Calculate commercial value and exchange rate + tipo_cambio = float(row[10] or 1.0) # C15 + valor_comercial_mn = 0.0 + peso_neto = 0.0 + peso_bruto = 0.0 + + # Only process values if it's a Partida (not Subpartida) + if es_subpartida == 'P': + if filters.currency_type.value == "MN": + if filters.is_shelter: + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_comercial_mn = float(row[20] or 0) * tc_value # C27 * TC + tipo_cambio = tc_value + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + valor_comercial_mn = float(row[20] or 0) * tc_value # C27 * TC + tipo_cambio = tc_value + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: + valor_comercial_mn = float(row[19] or 0) # C25 + tipo_cambio = float(row[37] or 1.0) # C51 + else: # ME + valor_comercial_mn = float(row[20] or 0) # C27 + if filters.exchange_rate_type.value == "FP" and fecha_pago: + fecha_tc = fecha_pago + if filters.use_transport_method and met_trans == 1: + if tipo_pedimento in ('1', '4', '98E'): + fecha_tc = fecha_inicio + + tc_value = self._obtener_tipo_cambio( + db, filters.database_name, fecha_tc, filters.is_shelter + ) + if tc_value: + tipo_cambio = tc_value + else: + tipo_cambio = float(row[37] or 1.0) # C51 + else: + tipo_cambio = float(row[37] or 1.0) # C51 + + peso_neto = float(row[21] or 0) # C29 + peso_bruto = float(row[22] or 0) # C30 + # If es_subpartida == 'S', values remain 0 + + # Get customs office name + aduana_nombre = self._get_customs_office_name( + db, filters.database_name, row[24] # C38 + ) + + # Get series information + series_info = self._get_definitive_series_info( + db, filters.database_name, consecutivo, linea, filters.is_shelter + ) + + # Get export symbol + symbolo_ex = self._get_part_export_symbol( + db, filters.database_name, row[36], filters.is_shelter # C50 + ) + + # Get rectification pedimento + pedimento_r1 = self._buscar_rectificacion(pedimento, row[28]) # C42 + + # Get driver badge + num_gaf_uni = self._get_driver_badge(db, filters.database_name, factura) + + # Create detailed movement item + movement = MovementItemDetailed( + Linea=linea, + Factura=factura, + Pedimento=pedimento, + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + Regimen=row[5], # C10 + Fecha_Inicio=row[6], # C11 + Fecha_Fin=row[7], # C12 + Fecha_Pago=row[8], # C13 + Remesa=row[9], # C14, + Proveedor=proveedor_info.get("nombre"), + RFCProveedor=proveedor_info.get("rfc"), + ProveedorTaxID=proveedor_info.get("tax_id"), + VendidoA=buyer_info.get("nombre"), + VendidoARFC=buyer_info.get("rfc"), + VendidoATaxID=buyer_info.get("tax_id"), + AgenteAduanal=broker_info.get("nombre"), + Patente=broker_info.get("patente"), + NumParte=row[14], # C20 + DescripcionE=row[15], # C21 + DescripcionI=row[16], # C22 + CantidadIE=float(row[17] or 0), # C23 + UniMed=row[18], # C24 + ValorComercialMN=valor_comercial_mn, + TipoCambio=tipo_cambio, + PesoNeto=peso_neto, + PesoBruto=peso_bruto, + OrdenCompraVenta=row[23], # C31 + FraccionArancelaria=row[29], # C32 + Preferencia=row[30], # C33 + Sector=row[32], # C35 + PaisOrigen=row[33], # C37 + Aduana=aduana_nombre, + Advalorem=row[27], # C41 + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[34], # C43 + NumOperacionVU=row[35], # C44 + Series=series_info, + Marca=row[40], # C46 + Modelo=row[41], # C47 + FraccionAmericana=row[42], # C48 + ECCN=row[43], # C49 + SimboloEx=symbolo_ex, + FechaEmision=row[38], # C52 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[39], # C53 + UsuarioAcr=row[40], # C54 + Transportista=row[41], # C55 + NumCaja=row[42], # C56 + Pedimento18=row[43], # C57 + AduanaCru=row[24], # C38 + Lote=row[44] # C58 + ) + + movements.append(movement) + + logger.info(f"Successfully retrieved {len(movements)} detailed definitive movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed definitive movements: {e}", exc_info=True) + raise + + def _get_definitive_series_info( + self, + db: Session, + db_name: str, + consecutivo: int, + linea: int, + is_shelter: bool + ) -> Optional[str]: + """ + Get series information for a definitive import partida from QSeriesDef table. + Returns formatted string with series, model, and part info. + """ + if not consecutivo or not linea: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesDef + WHERE Consecutivo = :consecutivo + AND LineaImpoDef = :linea + """) + result = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() + + if not result: + return None + + series_list = [] + for idx, row in enumerate(result, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_list.append(serie_str) + + return " | ".join(series_list) if series_list else None + + except Exception as e: + logger.debug(f"Error fetching definitive series info for consecutivo {consecutivo}, linea {linea}: {e}") + return None + + def get_repair_import_movements( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItem]: + """ + Retrieve repair import movements from legacy database (LLENADOIMP_REPARACION - NORMAL). + Aggregates movements by invoice number. + + Args: + db: Database session + filters: Filter criteria for the query + + Returns: + List of movement items matching the criteria + + Raises: + Exception: If database query fails + """ + logger.info(f"Fetching repair import movements with filters: {filters.model_dump()}") + + # Get configuration + met_trans = self._get_met_trans_config() + + # Build WHERE clause + where_conditions = [] + + # Date range filter + if filters.range_type.value == "FF": + where_conditions.append(f"FimRep.FechaFactura >= '{filters.start_date}' AND FimRep.FechaFactura <= '{filters.end_date}'") + else: + where_conditions.append(f"EqiPed.Fecha_Pago >= '{filters.start_date}' AND EqiPed.Fecha_Pago <= '{filters.end_date}'") + + # Status filter + if not filters.include_cancelled: + where_conditions.append("FimRep.Estatus = 'AC'") + + # Provider filter + if filters.provider: + where_conditions.append(f"FimRep.Proveedor = '{filters.provider}'") + + # Buyer filter + if filters.buyer: + where_conditions.append(f"FimRep.VendidoA = '{filters.buyer}'") + + # Pedimento code filter + if filters.pedimento_code: + where_conditions.append(f"EqiPed.ClavePed = '{filters.pedimento_code}'") + + # Discharge filter for repair imports + if filters.discharge_filter.value == "SiDes": + where_conditions.append("RepPim.Descarga = 1") + elif filters.discharge_filter.value == "NoDes": + where_conditions.append("RepPim.Descarga = 0") + # If ALL, no filter added + + # Exclude regime changes + where_conditions.append("FimRep.EsCambioRegimen <> 'S'") + + where_clause = " AND ".join(where_conditions) + + # Build main SQL query for repair imports + sql_query = text(f""" + SELECT + FimRep.FacturaImpo AS C1, + FimRep.PedimentoImpo AS C2, + FimRep.FechaFactura AS C3, + FimRep.Estatus AS C4, + EqiPed.ClavePed AS C5, + FimRep.ValorImpoME AS C6, + FimRep.ValorImpoMN AS C7, + FimRep.Proveedor AS C8, + FimRep.VendidoA AS C9, + EqiPed.Regimen AS C10, + EqiPed.Fecha_Inicio AS C11, + EqiPed.Fecha_Fin AS C12, + EqiPed.Fecha_Pago AS C13, + FimRep.Remesa AS C14, + FimRep.TipoCambio AS C15, + FimRep.AAduanal AS C18, + FimRep.Consecutivo AS C39, + EqiPed.PedRectifica AS C41, + FimRep.EDocument AS C42, + FimRep.NumOperacionVU AS C43, + FimRep.TipoCambio AS C49, + FimRep.FechaEmision AS C50, + FimRep.UsuarioCap AS C51, + FimRep.UsuarioAct AS C52, + FimRep.Transportista AS C53, + FimRep.Transporte + ' ' + FimRep.NumTrasporte AS C54, + EqiPed.Pedimento18 AS C55, + EqiPed.Aduana_Cruce AS C38, + EqiPed.TIPOPEDIMENTOTRANSPORTEE AS C56 + FROM [{filters.database_name}].dbo.QFacImpRep FimRep + LEFT JOIN [{filters.database_name}].dbo.QPedimentos EqiPed + ON EqiPed.Pedimento = FimRep.PedimentoImpo + LEFT JOIN [{filters.database_name}].dbo.QEqiMaqRep RepPim + ON RepPim.Consecutivo = FimRep.Consecutivo + LEFT JOIN [{filters.database_name}].dbo.QClaAct ClaAct + ON ClaAct.Clase = RepPim.Clase + WHERE {where_clause} + """) + + try: + result = db.execute(sql_query) + movements_dict = {} + + for row in result: + factura = row[0] # C1 + + # Use factura + IMPRE as key + tipo_mov = "IMPRE" + key = (factura, tipo_mov) + + # If already exists, skip (we only want one entry per invoice in Normal mode) + if key not in movements_dict: + consecutivo = row[16] # C39 + fecha_pago = row[12] # C13 + tipo_pedimento = row[28] # C56 + fecha_inicio = row[10] # C11 + + # Calculate total values for this invoice (with discharge filter) + valor_me, valor_mn = self._calculate_repair_totals( + db, filters.database_name, consecutivo, filters.discharge_filter.value + ) + + # Calculate exchange rate and values using unified method + valor_comercial, tipo_cambio = self._calculate_exchange_rate_and_value( + db=db, + db_name=filters.database_name, + valor_me=valor_me, + valor_mn=valor_mn, + tipo_cambio_db=float(row[20] or 1.0), # C49 + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + tipo_pedimento=tipo_pedimento, + currency_type=filters.currency_type.value, + exchange_rate_type=filters.exchange_rate_type.value, + is_shelter=filters.is_shelter, + use_transport_method=filters.use_transport_method, + met_trans=met_trans + ) + + # Get driver badge number + num_gaf_uni = self._get_driver_badge_repair(db, filters.database_name, factura) + + # Get rectification pedimento + pedimento = row[1] # C2 + ped_rectifica = row[17] # C41 + pedimento_r1 = self._buscar_rectificacion(pedimento, ped_rectifica) + + # Create movement item + movement = MovementItem( + Factura=factura, + Pedimento=row[1], # C2 + FechaFactura=row[2], # C3 + Estatus=row[3], # C4 + ClavePed=row[4], # C5 + TipoMovTemDef=tipo_mov, + EsCambioRegimen='N', + ValorMPTemp=valor_comercial, + ValorComercialMN=valor_comercial, + TipoCambio=tipo_cambio, + ValorAgre=0.0, + TipoExpo='', + PedimentoR1=pedimento_r1, + EDocument=row[18], # C42 + NumOperacionVU=row[19], # C43 + BaseDeDatos=filters.database_name, + NumGafUni=num_gaf_uni, + UsuarioCap=row[22], # C51 + UsuarioAcr=row[23], # C52 + Fecha_Pago=row[12], # C13 + NumCaja=row[25], # C54 + Pedimento18=row[26], # C55 + AduanaCru=row[27], # C38 + Lote=None # Repair imports don't have Lote in main query + ) + + movements_dict[key] = movement + + movements = list(movements_dict.values()) + logger.info(f"Successfully retrieved {len(movements)} repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching repair import movements: {e}", exc_info=True) + raise + + def _calculate_repair_totals( + self, + db: Session, + db_name: str, + consecutivo: int, + discharge_filter: str + ) -> tuple: + """ + Calculate total values for a repair import invoice. + Sums up all partidas (items) excluding sub-partidas, with optional discharge filter. + + Args: + db: Database session + db_name: Database name + consecutivo: Invoice consecutive number + discharge_filter: "SiDes", "NoDes", or "ALL" + + Returns: + tuple: (total_valor_me, total_valor_mn) + """ + try: + # Build discharge filter clause + discharge_clause = "" + if discharge_filter == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif discharge_filter == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + sql = text(f""" + SELECT SUM(RepPim.ValorImpoME), SUM(RepPim.ValorImpoMN) + FROM [{db_name}].dbo.QEqiMaqRep RepPim + WHERE RepPim.Consecutivo = :consecutivo + AND RepPim.EsSubpartida = 'P' + {discharge_clause} + """) + result = db.execute(sql, {"consecutivo": consecutivo}).fetchone() + + if result: + return (result[0] or 0, result[1] or 0) + return (0, 0) + except Exception as e: + logger.error(f"Error calculating repair totals for consecutivo {consecutivo}: {e}") + return (0, 0) + + def _get_driver_badge_repair(self, db: Session, db_name: str, factura: str) -> Optional[str]: + """Get driver's unique badge number for a repair import invoice""" + if not factura: + return None + + try: + sql = text(f""" + SELECT NUMGAFETEUNICO + FROM [{db_name}].dbo.GConductor + LEFT JOIN [{db_name}].dbo.QFacImpRep + ON QFacImpRep.CONDUCTOR = GConductor.CONDUCTOR + WHERE FacturaImpo = :factura + """) + result = db.execute(sql, {"factura": factura}).fetchone() + return result[0] if result else None + except Exception as e: + logger.debug(f"Error fetching driver badge for repair invoice {factura}: {e}") + return None + + def get_repair_import_movements_detailed( + self, + db: Session, + filters: ImportRepairFilter + ) -> List[MovementItemDetailed]: + """ + Retrieve detailed repair import movements from legacy database (LLENADOIMP_REPARACION - DETALLADO). + Returns individual partida lines with full detail. + + Args: + db: Database session + filters: Filter parameters including date range, discharge filter, etc. + + Returns: + List of detailed movement items + """ + try: + logger.info(f"Fetching detailed repair import movements with filters: {filters}") + + # Get database name + db_name = self._get_database_name(db) + if not db_name: + logger.error("Could not determine database name") + return [] + + # Get MetTrans configuration + met_trans = self._get_met_trans_config() + + # Build WHERE clause + where_clause = self._build_where_clause_repair(filters) + + # Build discharge filter for main query + discharge_clause = "" + if filters.discharge_filter == "SiDes": + discharge_clause = " AND RepPim.Descarga = 1" + elif filters.discharge_filter == "NoDes": + discharge_clause = " AND RepPim.Descarga = 0" + + # Build main SQL query with all required fields for detailed mode + sql = text(f""" + SELECT + RepPim.LineaImpo, -- C44: Linea + Rep.FacturaImpo, -- C1: Factura + Ped.PedNumero, -- C2: Pedimento + Rep.FechaFacImpo, -- C3: FechaFactura + Rep.Estatus, -- C4: Estatus + Ped.ClavePedImpo, -- C5: ClavePed + Ped.Regimen, -- C10: Regimen + Ped.FechaEntrada, -- C11: Fecha_Inicio + Ped.FechaPago, -- C13: Fecha_Pago + Rep.Remesa, -- C14: Remesa + Rep.TipoCambio, -- C15: TipoCambio (from header) + Rep.Cliente, -- C16: Cliente/Proveedor + Rep.VendidoA, -- C17: VendidoA + Rep.AgenteAduanal, -- C18: AgenteAduanal clave + RepPim.NumParteImpo, -- C20: NumParte + RepPim.DescripcionE, -- C21: DescripcionE + RepPim.DescripcionI, -- C22: DescripcionI + RepPim.CantidadImpo, -- C23: CantidadIE + RepPim.UnidadMedImpo, -- C24: UniMed + RepPim.ValorImpoMN, -- C25: ValorComercialMN (direct) + RepPim.ValorImpoME, -- C27: ValorComercialME + RepPim.PesoNetoImpo, -- C29: PesoNeto + RepPim.PesoBrutoImpo, -- C30: PesoBruto + RepPim.OrdenCompraVta, -- C31: OrdenCompraVenta + RepPim.FraccionImpo, -- C32: FraccionArancelaria + RepPim.Preferencia, -- C33: Preferencia + RepPim.Sector, -- C35: Sector + RepPim.PaisOrigenImpo, -- C37: PaisOrigen + RepPim.Aduana, -- C38: Aduana seccion + Rep.Consecutivo, -- C39: Consecutivo + RepPim.EsSubpartida, -- C40: Advalorem/EsSubpartida + Ped.PedRectifica, -- C41: PedRectifica + Rep.eDocument, -- C42: EDocument + Rep.NumOperacionVU, -- C43: NumOperacionVU + RepPim.Marca, -- C45: Marca + RepPim.Modelo, -- C46: Modelo + RepPim.FraccionAmericana, -- C47: FraccionAmericana + RepPim.ECCN, -- C48: ECCN + RepPim.TipoCambio AS TipoCambioPartida, -- C49: TipoCambio (from partida) + Rep.FechaEmbarque, -- C50: FechaEmision + Rep.UsuarioCap, -- C51: UsuarioCap + Rep.UsuarioAct, -- C52: UsuarioAcr + Rep.Transportista, -- C53: Transportista + Rep.NumCaja, -- C54: NumCaja + Ped.Pedimento18, -- C55: Pedimento18 + Ped.ClavePedImpo -- C56: ClavePedImpo (for MetTrans check) + FROM [{db_name}].dbo.QFacImpRep Rep + LEFT JOIN [{db_name}].dbo.QPedimentos Ped ON Rep.Pedimento = Ped.PedNumero + LEFT JOIN [{db_name}].dbo.QEqiMaqRep RepPim ON Rep.Consecutivo = RepPim.Consecutivo + WHERE Rep.EsCambioRegimen <> 'S' + {where_clause} + {discharge_clause} + ORDER BY Rep.FacturaImpo, RepPim.LineaImpo + """) + + results = db.execute(sql).fetchall() + logger.info(f"Found {len(results)} detailed repair import partidas") + + movements = [] + for row in results: + # Extract all fields from query + linea = row[0] + factura = row[1] + pedimento = row[2] + fecha_factura = row[3] + estatus = row[4] + clave_ped = row[5] + regimen = row[6] + fecha_inicio = row[7] + fecha_pago = row[8] + remesa = row[9] + tipo_cambio_header = row[10] + cliente = row[11] + vendido_a = row[12] + agente_aduanal_clave = row[13] + num_parte = row[14] + descripcion_e = row[15] + descripcion_i = row[16] + cantidad = row[17] + uni_med = row[18] + valor_mn_direct = row[19] + valor_me = row[20] + peso_neto = row[21] + peso_bruto = row[22] + orden_compra = row[23] + fraccion = row[24] + preferencia = row[25] + sector = row[26] + pais_origen = row[27] + aduana_seccion = row[28] + consecutivo = row[29] + es_subpartida = row[30] + ped_rectifica = row[31] + e_document = row[32] + num_operacion_vu = row[33] + marca = row[34] + modelo = row[35] + fraccion_americana = row[36] + eccn = row[37] + tipo_cambio_partida = row[38] + fecha_emision = row[39] + usuario_cap = row[40] + usuario_acr = row[41] + transportista = row[42] + num_caja = row[43] + pedimento_18 = row[44] + clave_ped_mettrans = row[45] + + # Get client/supplier information (Proveedor) + proveedor_info = self._get_client_info(db, db_name, cliente, is_supplier=True) + + # Get sold-to client information (VendidoA) + vendido_info = self._get_client_info(db, db_name, vendido_a, is_supplier=False) + + # Get customs agent information + agente_info = self._get_customs_agent_info(db, db_name, agente_aduanal_clave) + + # Get customs section name + aduana_nombre = self._get_aduana_seccion_nombre(db, db_name, aduana_seccion) + + # Calculate exchange rate and commercial value + valor_mn, tipo_cambio_final = self._calculate_exchange_rate_and_value( + db=db, + db_name=db_name, + es_subpartida=es_subpartida, + valor_me=valor_me, + valor_mn_direct=valor_mn_direct, + fecha_pago=fecha_pago, + fecha_inicio=fecha_inicio, + clave_ped=clave_ped_mettrans, + tipo_cambio_partida=tipo_cambio_partida, + currency_type=filters.currency_type, + exchange_rate_type=filters.exchange_rate_type, + met_trans=met_trans + ) + + # Set peso values based on subpartida flag + peso_neto_final = peso_neto if es_subpartida == 'P' else 0 + peso_bruto_final = peso_bruto if es_subpartida == 'P' else 0 + + # Get series information for this partida + series = self._get_series_info_repair(db, db_name, consecutivo, linea) + + # Get rectification pedimento + pedimento_r1 = self._buscar_rectificacion(db, db_name, pedimento, ped_rectifica) + + # Get driver badge unique number + num_gaf_uni = self._get_driver_badge_repair(db, db_name, factura) + + # Build movement item + movement = MovementItemDetailed( + linea=linea, + factura=factura, + pedimento=pedimento, + fecha_factura=fecha_factura, + estatus=estatus, + clave_ped=clave_ped, + tipo_mov_tem_def="IMPRE", + es_cambio_regimen="N", + regimen=regimen, + fecha_inicio=fecha_inicio, + fecha_fin=None, # Not available for repair imports + fecha_pago=fecha_pago, + remesa=remesa, + tipo_cambio=tipo_cambio_final, + proveedor=proveedor_info.get("nombre"), + rfc_proveedor=proveedor_info.get("rfc"), + proveedor_tax_id=proveedor_info.get("tax_id"), + vendido_a=vendido_info.get("nombre"), + vendido_a_rfc=vendido_info.get("rfc"), + vendido_a_tax_id=vendido_info.get("tax_id"), + agente_aduanal=agente_info.get("nombre"), + patente=agente_info.get("patente"), + num_parte=num_parte, + descripcion_e=self._remove_commas(descripcion_e), + descripcion_i=self._remove_commas(descripcion_i), + cantidad_ie=cantidad, + uni_med=uni_med, + valor_comercial_mn=valor_mn, + peso_neto=peso_neto_final, + peso_bruto=peso_bruto_final, + orden_compra_venta=orden_compra, + fraccion_arancelaria=fraccion, + preferencia=preferencia, + sector=sector, + pais_origen=pais_origen, + aduana=aduana_nombre, + advalorem=es_subpartida, + tipo_expo=None, + pedimento_r1=pedimento_r1, + e_document=e_document, + num_operacion_vu=num_operacion_vu, + series=series, + marca=marca, + modelo=modelo, + fraccion_americana=fraccion_americana, + eccn=eccn, + fecha_emision=fecha_emision, + base_de_datos=db_name, + num_gaf_uni=num_gaf_uni, + usuario_cap=usuario_cap, + usuario_acr=usuario_acr, + transportista=transportista, + num_caja=num_caja, + pedimento_18=pedimento_18, + aduana_cru=aduana_seccion + ) + + movements.append(movement) + + logger.info(f"Successfully processed {len(movements)} detailed repair import movements") + return movements + + except Exception as e: + logger.error(f"Error fetching detailed repair import movements: {e}", exc_info=True) + raise + + def _get_series_info_repair(self, db: Session, db_name: str, consecutivo: int, linea: int) -> Optional[str]: + """Get series information for repair import partida""" + if not consecutivo or not linea: + return None + + try: + sql = text(f""" + SELECT SerieImpo, ModeloImpo, ParteImpo + FROM [{db_name}].dbo.QSeriesImpoRep + WHERE Consecutivo = :consecutivo + AND LineaImpo = :linea + ORDER BY Renglon + """) + results = db.execute(sql, {"consecutivo": consecutivo, "linea": linea}).fetchall() + + if not results: + return None + + series_list = [] + for idx, row in enumerate(results, 1): + serie = row[0] + modelo = row[1] + parte = row[2] + + serie_str = f"{idx}) {serie}" + if modelo: + serie_str += f". Modelo: {modelo}" + if parte: + serie_str += f". Parte: {parte}" + + series_list.append(serie_str) + + return " | ".join(series_list) if series_list else None + + except Exception as e: + logger.debug(f"Error fetching repair series info for consecutivo {consecutivo}, linea {linea}: {e}") + return None + + def _build_where_clause_repair(self, filters: ImportRepairFilter) -> str: + """Build WHERE clause for repair imports query""" + conditions = [] + + # Date range filter + if filters.range_type == RangeType.INVOICE_DATE: + conditions.append(f"Rep.FechaFacImpo BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + elif filters.range_type == RangeType.PAYMENT_DATE: + conditions.append(f"Ped.FechaPago BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + elif filters.range_type == RangeType.ENTRY_DATE: + conditions.append(f"Ped.FechaEntrada BETWEEN '{filters.date_from}' AND '{filters.date_to}'") + + return " AND " + " AND ".join(conditions) if conditions else "" + + +# Singleton instance +movement_service = MovementService() diff --git a/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py new file mode 100644 index 00000000..47114e98 --- /dev/null +++ b/backend/api/v1/modules/a76/reports/movements/invoices/tasks.py @@ -0,0 +1,108 @@ + +import base64 +import logging +import traceback +from typing import Dict, Any + +from core.celery_app import celery_app +from core.database import CoreSessionLocal +from core.email import EmailService +from datetime import datetime + +from .movement_service import movement_service +from .schemas import AllMovementsFilter +from .csv_utils import generate_csv_from_movements + +logger = logging.getLogger(__name__) + +@celery_app.task(bind=True, name="generate_invoice_movements_async") +def generate_invoice_movements_async(self, filter_data: Dict[str, Any], user_email: str = None): + """ + Async task to generate invoice movements report. + FETCHES data -> GENERATES CSV -> SENDS EMAIL (optional) -> RETURNS CSV (base64) + """ + db = CoreSessionLocal() + try: + # 1. Update Progress + self.update_state(state='PROCESSING', meta={'current': 10, 'total': 100, 'status': 'Inicializando reporte...'}) + + # 2. Reconstruct Filter + filters = AllMovementsFilter(**filter_data) + + # 3. Fetch Data + self.update_state(state='PROCESSING', meta={'current': 30, 'total': 100, 'status': 'Obteniendo movimientos de base de datos...'}) + logger.info(f"Async Task: Fetching movements for {filters}") + + movements = movement_service.get_all_movements(db=db, filters=filters) + + self.update_state(state='PROCESSING', meta={'current': 70, 'total': 100, 'status': f'Procesando {len(movements)} registros...'}) + + # 4. Generate CSV + csv_content = generate_csv_from_movements( + movements=movements, + filters=filters + ) + + # 5. Send Email if requested + email_sent = False + if filters.send_email and user_email: + self.update_state(state='PROCESSING', meta={'current': 90, 'total': 100, 'status': 'Enviando correo electrónico...'}) + try: + # Generate filename + filename = f"reporte_facturas_{filters.start_date}_{filters.end_date}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" + + # Send email (using the new async wrapper or run_until_complete if needed, + # but since we are in a sync celery task we might need to be careful with async/await. + # Actually EmailService.send_report_email is async. + # We need to run it synchronously here or make the task async. + # Celery tasks are sync by default. We can use asgiref.sync.async_to_sync + + import asyncio + from asgiref.sync import async_to_sync + + # Helper to run async method + result = async_to_sync(EmailService.send_report_email)( + recipient_email=user_email, + subject=f"Reporte de Facturas - {filters.start_date} al {filters.end_date}", + body_text=f"Se ha generado el reporte de facturas solicitado con {len(movements)} registros.", + csv_content=csv_content, + filename=filename + ) + + if result: + email_sent = True + logger.info(f"Async Task: Email sent to {user_email}") + else: + logger.warning(f"Async Task: Failed to send email to {user_email}") + + except Exception as e: + logger.error(f"Async Task: Email error: {str(e)}") + + # 6. Encode and Return + self.update_state(state='PROCESSING', meta={'current': 95, 'total': 100, 'status': 'Finalizando...'}) + + # Convert string csv to bytes then base64 + pdf_b64 = base64.b64encode(csv_content.encode('utf-8')).decode('utf-8') + + return { + 'status': 'success', + 'file_name': f"reporte_facturas_{datetime.now().strftime('%Y%m%d')}.csv", + 'content': pdf_b64, + 'media_type': 'text/csv', + 'email_sent': email_sent, + 'total_records': len(movements) + } + + except Exception as e: + logger.error(f"Error in generate_invoice_movements_async: {str(e)}", exc_info=True) + self.update_state( + state='FAILURE', + meta={ + 'exc_type': type(e).__name__, + 'exc_message': str(e), + 'custom': 'Error generating report' + } + ) + raise e + finally: + db.close() diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index 093aa20b..570b247b 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -12,7 +12,9 @@ from .general_catalogs.router import router as general_catalogs_router from .invoices.routes import router as invoices_router from .items.routes import router as items_router from .classes import router as classes_router +from .classes import router as classes_router from .clients_and_providers import router as client_and_provider_router +from .imports.routes import router as imports_router from .invoice_settings.routes import router as invoice_settings_router from .item_presets.routes import router as item_presets_router from .general_catalogs.company import router as company_router @@ -33,11 +35,14 @@ from .reports.importacion.facturas.routes import router as invoices_reports_rout from .reports.importacion.consolidados.routes import router as consolidated_reports_router from .reports.importacion.packing_list.routes import router as packing_list_router from .reports.exportacion.aviso_consolidado.routes import router as aviso_consolidado_export_router +from .reports.movements.invoices.routes import router as movement_invoices_router from .reports.exportacion.descargo.routes import router as discharge_reports_router from .manifests.manifest.routes import router as manifests_router from .manifests.driver.routes import router as manifest_drivers_router from .manifests.manifiesto_anexo.routes import router as manifest_anexos_router - +from .reports.exportacion.transmission.MAINX30.routes import router as transmission_router +from .reports.importacion.transmission.temporal.MAINX30.routes import router as transmission_temporal_router +from .reports.importacion.transmission.definitive.MAINX30.routes import router as transmission_definitive_router # Router principal @@ -47,6 +52,7 @@ router = APIRouter() router.include_router(general_catalogs_router, prefix="/a76", tags=["a76 / general_catalogs"]) router.include_router(invoices_router, prefix="/a76", tags=["a76 / invoices"]) router.include_router(items_router, prefix="/a76", tags=["a76 / items"]) +router.include_router(imports_router, prefix="/a76/imports", tags=["a76 / imports"]) router.include_router(invoice_settings_router) router.include_router(item_presets_router, prefix="/a76/item-presets", tags=["a76 / item_presets"]) router.include_router(pedimentos_router, prefix="/a76") @@ -95,6 +101,13 @@ router.include_router( tags=["a76 / reports"] ) +router.include_router( + + movement_invoices_router, + prefix="/a76/reports/movements/invoices", + tags=["a76 / reports"] +) + router.include_router( discharge_reports_router, prefix="/a76/reports/exportacion/descargo", @@ -119,6 +132,24 @@ router.include_router( tags=["a76 / manifests"] ) +router.include_router( + transmission_router, + prefix="/a76/reports/exportacion/transmission", + tags=["a76 / reports"] +) + +router.include_router( + transmission_temporal_router, + prefix="/a76/reports/importacion/transmission/temporal", + tags=["a76 / reports"] +) + +router.include_router( + transmission_definitive_router, + prefix="/a76/reports/importacion/transmission/definitive", + tags=["a76 / reports"] +) + # Registrar router de bitácora from .audit_log.router import router as audit_log_router -router.include_router(audit_log_router, prefix="/a76/audit-log", tags=["Audit Log"]) \ No newline at end of file +router.include_router(audit_log_router, prefix="/a76/audit-log", tags=["Audit Log"]) diff --git a/backend/api/v1/modules/core/dashboard/service.py b/backend/api/v1/modules/core/dashboard/service.py index 9c10d7a7..64c00dba 100644 --- a/backend/api/v1/modules/core/dashboard/service.py +++ b/backend/api/v1/modules/core/dashboard/service.py @@ -12,7 +12,7 @@ from api.v1.modules.a76.invoices.models import ( InvoiceComplianceMx, OperationType, ) -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.clients_and_providers.models import ( ClientProvider, ClientOrProviderEnum, @@ -244,9 +244,9 @@ class DashboardService: def get_items_metrics(self) -> KPIMetric: """Obtiene métricas de items/productos""" total_items = ( - self.db.query(func.count(Item.id)) + self.db.query(func.count(LineItem.id)) .filter( - Item.tenant_id == self.tenant_id, Item.company_id == self.company_id + LineItem.tenant_id == self.tenant_id, LineItem.company_id == self.company_id ) .scalar() or 0 diff --git a/backend/api/v1/modules/public/reference_data/sectors/dto.py b/backend/api/v1/modules/public/reference_data/sectors/dto.py index f25ca5dd..e97e8a1d 100644 --- a/backend/api/v1/modules/public/reference_data/sectors/dto.py +++ b/backend/api/v1/modules/public/reference_data/sectors/dto.py @@ -4,6 +4,6 @@ from pydantic import BaseModel, ConfigDict, Field class SectorDTO(BaseModel): key: str = Field(..., min_length=1, max_length=8) description: str - authorized: int + authorized: bool model_config = ConfigDict(from_attributes=True) diff --git a/backend/api/v1/modules/public/reference_data/sectors/routes.py b/backend/api/v1/modules/public/reference_data/sectors/routes.py index 05aa0f72..da38ac7d 100644 --- a/backend/api/v1/modules/public/reference_data/sectors/routes.py +++ b/backend/api/v1/modules/public/reference_data/sectors/routes.py @@ -1,8 +1,10 @@ -from typing import Any, Dict + +from typing import Any, Dict, Optional from core.database import get_core_db -from core.security import get_current_user, has_role +from core.security import get_current_user from fastapi import APIRouter, Depends, HTTPException, Query +from sqlalchemy import or_ from sqlalchemy.orm import Session from .dto import SectorDTO @@ -15,13 +17,25 @@ router = APIRouter(prefix="/sectors") def list_sectors( page: int = Query(1, ge=1, description="Número de página"), page_size: int = Query(50, ge=1, le=100, description="Tamaño de página"), + search: Optional[str] = Query(None, description="Término de búsqueda"), db: Session = Depends(get_core_db), current_user: dict = Depends(get_current_user), ): skip = (page - 1) * page_size query = db.query(Sector) - items = query.offset(skip).limit(page_size).all() + + if search: + search_filter = or_( + Sector.key.ilike(f"%{search}%"), + Sector.description.ilike(f"%{search}%") + ) + query = query.filter(search_filter) + total = query.count() + # Add deterministic sort order + query = query.order_by(Sector.key) + items = query.offset(skip).limit(page_size).all() + return { "items": [SectorDTO.model_validate(obj) for obj in items], "total": total, @@ -40,47 +54,3 @@ def get_sector( if not obj: raise HTTPException(status_code=404, detail="Not found") return obj - - -@router.post("/", response_model=SectorDTO, status_code=201) -def create_sector( - data: SectorDTO, - db: Session = Depends(get_core_db), - current_user: dict = Depends(has_role("admin")), -): - obj = Sector(**data.dict()) - db.add(obj) - db.commit() - db.refresh(obj) - return obj - - -@router.put("/{key}", response_model=SectorDTO) -def update_sector( - key: str, - data: SectorDTO, - db: Session = Depends(get_core_db), - current_user: dict = Depends(has_role("admin")), -): - obj = db.query(Sector).filter(Sector.key == key).first() - if not obj: - raise HTTPException(status_code=404, detail="Not found") - for field, value in data.dict().items(): - setattr(obj, field, value) - db.commit() - db.refresh(obj) - return obj - - -@router.delete("/{key}", status_code=204) -def delete_sector( - key: str, - db: Session = Depends(get_core_db), - current_user: dict = Depends(has_role("admin")), -): - obj = db.query(Sector).filter(Sector.key == key).first() - if not obj: - raise HTTPException(status_code=404, detail="Not found") - db.delete(obj) - db.commit() - return None diff --git a/backend/api/v1/modules/sitar/common/base_service.py b/backend/api/v1/modules/sitar/common/base_service.py index 0795a539..b4dbe284 100644 --- a/backend/api/v1/modules/sitar/common/base_service.py +++ b/backend/api/v1/modules/sitar/common/base_service.py @@ -86,6 +86,8 @@ class SitarAPIBaseService: httpx.HTTPError: If request fails """ token = await self._get_token() + # Ensure no double slash between fractures and endpoint + endpoint = endpoint.lstrip("/") url = f"{self.base_url}/fractions/{endpoint}" headers = { "Authorization": f"Bearer {token}", diff --git a/backend/api/v1/modules/sitar/fracciones_usa/schemas.py b/backend/api/v1/modules/sitar/fracciones_usa/schemas.py index 0022069e..1c5a8ba7 100644 --- a/backend/api/v1/modules/sitar/fracciones_usa/schemas.py +++ b/backend/api/v1/modules/sitar/fracciones_usa/schemas.py @@ -11,7 +11,7 @@ class FraccionesUSAResponse(BaseModel): FRACCION_CON_PUNTO: Optional[str] = None FRACCION_MOSTRAR: Optional[str] = None ESPECIFICO: Optional[str] = None - NIVEL: Optional[str] = None + NIVEL: Optional[int] = None DESCRIPCION: Optional[str] = None UNIDADCANTIDAD: Optional[str] = None TARIFA1: Optional[str] = None diff --git a/backend/api/v1/modules/sitar/fracciones_usa/service.py b/backend/api/v1/modules/sitar/fracciones_usa/service.py index 5109671c..b1f739df 100644 --- a/backend/api/v1/modules/sitar/fracciones_usa/service.py +++ b/backend/api/v1/modules/sitar/fracciones_usa/service.py @@ -1,10 +1,11 @@ """Fracciones USA Service""" -from typing import Optional, List +from typing import Optional, List, Dict, Any from ..common import SitarAPIBaseService from .schemas import FraccionesUSAResponse + class FraccionesUSAService(SitarAPIBaseService): """Service for USA Fracciones operations""" @@ -20,6 +21,7 @@ class FraccionesUSAService(SitarAPIBaseService): async def search( self, fraccion: Optional[str] = None, + descripcion: Optional[str] = None, skip: int = 0, limit: int = 100, ) -> List[FraccionesUSAResponse]: @@ -27,11 +29,13 @@ class FraccionesUSAService(SitarAPIBaseService): params = {"skip": skip, "limit": min(limit, 1000)} if fraccion: params["fraccion"] = fraccion + if descripcion: + params["descripcion"] = descripcion - data = await self._make_request("GET", "/api/v1/fracciones-usa/", params=params) + data = await self._make_request("GET", "api/v1/fracciones-usa/", params=params) return [FraccionesUSAResponse(**item) for item in data] async def get_by_id(self, consecutivo: int) -> FraccionesUSAResponse: """Get single USA Fraccion record by CONSECUTIVO""" - data = await self._make_request("GET", f"/api/v1/fracciones-usa/{consecutivo}") + data = await self._make_request("GET", f"api/v1/fracciones-usa/{consecutivo}") return FraccionesUSAResponse(**data) diff --git a/backend/api/v1/router.py b/backend/api/v1/router.py index b95e612d..474bd601 100644 --- a/backend/api/v1/router.py +++ b/backend/api/v1/router.py @@ -21,7 +21,7 @@ router.include_router(core_router) router.include_router(a76_router) router.include_router(a24_router) router.include_router(public_router) -router.include_router(sitar_router) +router.include_router(sitar_router, prefix="/sitar") # Health check diff --git a/backend/core/celery_app.py b/backend/core/celery_app.py index e0d19372..de7d211c 100644 --- a/backend/core/celery_app.py +++ b/backend/core/celery_app.py @@ -1,6 +1,10 @@ import os from celery import Celery +# Import models in correct order for SQLAlchemy relationship resolution +# CRITICAL: FaLineItem must be imported BEFORE LineItem +from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem # noqa: F401 +from api.v1.modules.a76.items.models import LineItem # noqa: F401 valkey_url = os.getenv("VALKEY_URL", "redis://valkey:6379/0") @@ -13,7 +17,12 @@ celery_app = Celery( "api.v1.modules.a76.reports.importacion.consolidados.task", "api.v1.modules.a76.reports.importacion.packing_list.task", "api.v1.modules.a76.reports.exportacion.aviso_consolidado.task", - "api.v1.modules.a76.reports.exportacion.descargo.task" + "api.v1.modules.a76.reports.movements.invoices.tasks", + "api.v1.modules.a76.reports.exportacion.descargo.task", + "api.v1.modules.a76.imports.tasks", + "api.v1.modules.a76.reports.exportacion.transmission.MAINX30.task", + "api.v1.modules.a76.reports.importacion.transmission.temporal.MAINX30.task", + "api.v1.modules.a76.reports.importacion.transmission.definitive.MAINX30.task" ] # Ruta al módulo donde están las tareas ) @@ -28,4 +37,4 @@ celery_app.conf.update( ) if __name__ == "__main__": - celery_app.start() \ No newline at end of file + celery_app.start() diff --git a/backend/core/config.py b/backend/core/config.py index 31919a35..13459073 100644 --- a/backend/core/config.py +++ b/backend/core/config.py @@ -50,6 +50,14 @@ class Settings(BaseSettings): SITAR_API_USER: str = "" SITAR_API_PASSWORD: str = "" + # SMTP Email Configuration + SMTP_HOST: str = "smtp.gmail.com" + SMTP_PORT: int = 587 + SMTP_USER: str = "" + SMTP_PASSWORD: str = "" + SMTP_FROM_NAME: str = "Sistema Anexo76" + SMTP_USE_TLS: bool = True + model_config = SettingsConfigDict( env_file=[".env", "../.env"], case_sensitive=True, diff --git a/backend/core/email.py b/backend/core/email.py new file mode 100644 index 00000000..41b81a67 --- /dev/null +++ b/backend/core/email.py @@ -0,0 +1,117 @@ +""" +Email service for sending reports via SMTP. +""" +import aiosmtplib +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.base import MIMEBase +from email import encoders +from typing import List +import logging +from datetime import datetime + +from core.config import settings + +logger = logging.getLogger(__name__) + + +class EmailService: + """Service for sending emails with attachments.""" + + @staticmethod + async def send_report_email( + recipient_email: str, + subject: str, + body_text: str, + csv_content: str, + filename: str + ) -> bool: + """ + Send a report email with CSV attachment. + + Args: + recipient_email: Email address of recipient + subject: Email subject line + body_text: Plain text email body + csv_content: CSV file content as string + filename: Name for the CSV attachment + + Returns: + bool: True if email sent successfully, False otherwise + """ + try: + # Create message + msg = MIMEMultipart() + msg['From'] = f"{settings.SMTP_FROM_NAME} <{settings.SMTP_USER}>" + msg['To'] = recipient_email + msg['Subject'] = subject + + # Email body + html_body = f""" + + +
+

+ Reporte de Facturas - Sistema Anexo76 +

+

{body_text}

+

+ El reporte se encuentra adjunto en formato CSV. +

+
+

+ Este es un correo generado automáticamente. Por favor no responder. +

+

+ Generado el {datetime.now().strftime('%d/%m/%Y a las %H:%M')} +

+
+ + + """ + msg.attach(MIMEText(html_body, 'html')) + + # CSV attachment + attachment = MIMEBase('text', 'csv') + attachment.set_payload(csv_content.encode('utf-8')) + encoders.encode_base64(attachment) + attachment.add_header( + 'Content-Disposition', + f'attachment; filename="{filename}"' + ) + msg.attach(attachment) + + # Create SSL context that ignores certificate errors + import ssl + context = ssl.create_default_context() + context.check_hostname = False + context.verify_mode = ssl.CERT_NONE + + # Send email + if settings.SMTP_PORT == 465: + # Port 465 uses implicit SSL + async with aiosmtplib.SMTP( + hostname=settings.SMTP_HOST, + port=settings.SMTP_PORT, + use_tls=True, # Implicit SSL + tls_context=context + ) as smtp: + await smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD) + await smtp.send_message(msg) + else: + # Port 587 uses STARTTLS + async with aiosmtplib.SMTP( + hostname=settings.SMTP_HOST, + port=settings.SMTP_PORT, + tls_context=context + ) as smtp: + await smtp.starttls(tls_context=context) + await smtp.login(settings.SMTP_USER, settings.SMTP_PASSWORD) + await smtp.send_message(msg) + + logger.info(f"Email sent successfully to {recipient_email}") + return True + + except Exception as e: + logger.error(f"Failed to send email to {recipient_email}: {str(e)}") + return False diff --git a/backend/core/error_handlers.py b/backend/core/error_handlers.py index e1f7783a..d038f4ab 100644 --- a/backend/core/error_handlers.py +++ b/backend/core/error_handlers.py @@ -5,7 +5,7 @@ Manejadores globales de excepciones para FastAPI import logging from typing import Any, Dict -from fastapi import Request, status +from fastapi import Request, status, HTTPException from fastapi.responses import JSONResponse from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError @@ -91,16 +91,19 @@ async def integrity_error_handler( }, ) - # Intentar extraer información útil del error - error_message = "Error de integridad en la base de datos" - orig_msg = str(exc.orig).lower() - if "unique constraint" in orig_msg or "duplicate key" in orig_msg: - error_message = "El registro ya existe. Verifica los campos únicos." - elif "foreign key" in orig_msg: - error_message = "Referencia inválida a otro registro." - elif "not null" in orig_msg: - error_message = "Falta un campo requerido." + + # Check for unique/duplicate key violations (English and Spanish) + if any(kw in orig_msg for kw in ["unique constraint", "duplicate key", "duplicada", "unicidad", "ya existe"]): + error_message = "El registro ya existe. Verifica los campos únicos (Año, Aduana, Patente, Número, etc.)." + # Check for foreign key violations (English and Spanish) + elif any(kw in orig_msg for kw in ["foreign key", "foránea", "referencia"]): + error_message = "Referencia inválida a otro registro. Verifica las categorías y catálogos seleccionados." + # Check for not null violations (English and Spanish) + elif any(kw in orig_msg for kw in ["not null", "no nulo", "valor nulo"]): + error_message = "Falta un campo requerido. Asegúrate de llenar todos los datos obligatorios." + else: + error_message = "Error de integridad en la base de datos" return JSONResponse( status_code=status.HTTP_409_CONFLICT, @@ -138,6 +141,23 @@ async def sqlalchemy_error_handler( ) +async def http_exception_handler( + request: Request, + exc: HTTPException, +) -> JSONResponse: + """ + Manejador para HTTPException de FastAPI + """ + return JSONResponse( + status_code=exc.status_code, + content={ + "error": "HTTP_ERROR", + "message": exc.detail, + "status_code": exc.status_code, + }, + ) + + async def general_exception_handler( request: Request, exc: Exception, @@ -172,6 +192,7 @@ def register_exception_handlers(app) -> None: app: Instancia de FastAPI """ app.add_exception_handler(BaseAPIException, base_exception_handler) + app.add_exception_handler(HTTPException, http_exception_handler) app.add_exception_handler(RequestValidationError, validation_exception_handler) app.add_exception_handler(IntegrityError, integrity_error_handler) app.add_exception_handler(SQLAlchemyError, sqlalchemy_error_handler) diff --git a/backend/core/middleware.py b/backend/core/middleware.py index d7da611b..d4c9c594 100644 --- a/backend/core/middleware.py +++ b/backend/core/middleware.py @@ -1,7 +1,8 @@ import logging import time from typing import Callable -from fastapi import HTTPException, Request, Response +from fastapi import Request, Response +from fastapi.responses import JSONResponse from starlette.middleware.base import BaseHTTPMiddleware from .config import settings from .database import CoreSessionLocal @@ -34,9 +35,13 @@ class TenantMiddleware(BaseHTTPMiddleware): # 4. Validación estricta de Token (solo para lo que no es público ni OPTIONS) auth_header = request.headers.get("Authorization") if not auth_header or not auth_header.startswith("Bearer "): - raise HTTPException( - status_code=401, - detail="Missing or invalid authorization header" + return JSONResponse( + status_code=401, + content={ + "error": "HTTP_ERROR", + "message": "Missing or invalid authorization header", + "status_code": 401, + } ) token = auth_header.split(" ")[1] @@ -48,7 +53,14 @@ class TenantMiddleware(BaseHTTPMiddleware): request.state.user_info = user_info except Exception as e: logger.error(f"❌ Tenant validation error: {str(e)}") - raise HTTPException(status_code=401, detail="Invalid authentication") + return JSONResponse( + status_code=401, + content={ + "error": "HTTP_ERROR", + "message": "Invalid authentication", + "status_code": 401, + } + ) # 5. Continuar con la petición real return await call_next(request) @@ -104,19 +116,28 @@ class LicenseValidationMiddleware(BaseHTTPMiddleware): license_info = license_service.validate_license(tenant_id) if not license_info["is_valid"]: - raise HTTPException( + return JSONResponse( status_code=402, - detail=f"License validation failed: {license_info['reason']}", + content={ + "error": "HTTP_ERROR", + "message": f"License validation failed: {license_info['reason']}", + "status_code": 402, + } ) # Agregar info de licencia al request state request.state.license_info = license_info - except HTTPException: - raise except Exception as e: logger.error(f"License validation error: {str(e)}") - raise HTTPException(status_code=500, detail="License validation error") + return JSONResponse( + status_code=500, + content={ + "error": "HTTP_ERROR", + "message": "License validation error", + "status_code": 500, + } + ) finally: db.close() diff --git a/backend/main.py b/backend/main.py index ae673fbf..b1740f07 100644 --- a/backend/main.py +++ b/backend/main.py @@ -6,6 +6,75 @@ Backend API con FastAPI + Keycloak + SQLAlchemy import logging import subprocess +# Importar modelos para registrar con SQLAlchemy + +# Reference Data (Dependencies) +from api.v1.modules.public.reference_data.countries.models import Country +from api.v1.modules.public.reference_data.currency_types.models import CurrencyType +from api.v1.modules.public.reference_data.customs_sections.models import CustomsSection +from api.v1.modules.public.reference_data.customs_warehouses.models import CustomsWarehouse +from api.v1.modules.public.reference_data.incoterms.models import Incoterm +from api.v1.modules.public.reference_data.invoice_types.models import InvoiceType +from api.v1.modules.public.reference_data.material_types.models import MaterialType +from api.v1.modules.public.reference_data.payment_methods.models import PaymentMethod +from api.v1.modules.public.reference_data.pedimento_codes.models import PedimentoCode +from api.v1.modules.public.reference_data.pedimento_regimens.models import RegimenPedimento +from api.v1.modules.public.reference_data.sectors.models import Sector +from api.v1.modules.public.reference_data.states.models import State +from api.v1.modules.public.reference_data.transport_modes.models import TransportMode +from api.v1.modules.public.reference_data.transport_types.models import TransportType +from api.v1.modules.public.reference_data.valuation_methods.models import ValuationMethod +from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure +from api.v1.modules.a76.general_catalogs.exchange_rate.models import ExchangeRate +from api.v1.modules.a76.general_catalogs.identifiers.models import Identifier +from api.v1.modules.a76.classes.models import Class +from api.v1.modules.a76.general_catalogs.classification_concepts.models import ClassificationConcept +from api.v1.modules.a76.general_catalogs.concepts.models import Concept +from api.v1.modules.a76.general_catalogs.customs_broker_concepts.models import CustomsBrokerConcept +from api.v1.modules.a76.general_catalogs.depreciation_catalog.models import DepreciationCatalog +from api.v1.modules.a76.general_catalogs.doda.models import Doda +from api.v1.modules.a76.general_catalogs.electronic_notices.models import ElectronicNotice +from api.v1.modules.a76.general_catalogs.equivalencies.models import Equivalency +from api.v1.modules.a76.general_catalogs.error_catalogs.models import ErrorCatalog +from api.v1.modules.a76.general_catalogs.fda_catalog.models import FDACatalog +from api.v1.modules.a76.general_catalogs.inpc.models import INPC +from api.v1.modules.a76.general_catalogs.legends.models import Legend +from api.v1.modules.a76.general_catalogs.multi_currency_types.models import MultiCurrencyType +from api.v1.modules.a76.general_catalogs.packages.models import Package +from api.v1.modules.a76.general_catalogs.ports.models import Port +from api.v1.modules.a76.general_catalogs.prevalidators.models import Prevalidator +from api.v1.modules.a76.general_catalogs.seal.models import Seal +from api.v1.modules.a76.general_catalogs.signatures.models import Signature +from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.models import ( + TariffFraction, +) +from api.v1.modules.a76.general_catalogs.unit_conversions.models import UnitConversion +from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.models import ( + USTariffFraction, +) + +# Core Modules & Reference Data (Dependencies) +from api.v1.modules.a76.clients_and_providers.models import ClientProvider +from api.v1.modules.a76.customs_brokers.models import CustomsBroker +from api.v1.modules.a76.general_catalogs.company.models import Company + +# Core Modules & Transactional Models +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.items.series.models import Serie +from api.v1.modules.a76.parts.models import Part +from api.v1.modules.a24.fa.fa_parts.models import FaPart +from api.v1.modules.a24.inv.inv_parts.models import InvPart +from api.v1.modules.a76.manifests.manifest.models import Manifest +from api.v1.modules.a76.manifests.concept_manifestation.models import ConceptManifestation +from api.v1.modules.a76.manifests.value_manifestation.models import ValueManifestation + +# Transactional Primary Models +from api.v1.modules.a76.pedmientos.models.pedimentos import Pedimentos +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceSalesDetails +from api.v1.modules.a76.audit_log.events import register_audit_listeners + +# Core Modules (Secondary) + from api.v1.router import router as api_v1_router from core.config import settings from core.database import init_db @@ -23,7 +92,9 @@ from fastapi.staticfiles import StaticFiles from pathlib import Path # Importar modelos para registrar con SQLAlchemy -from api.v1.modules.a76.items.models import Item +# IMPORTANT: Import FaLineItem BEFORE LineItem for relationship resolution +from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.items.series.models import Serie from api.v1.modules.a76.parts.models import Part from api.v1.modules.a24.fa.fa_parts.models import FaPart @@ -70,18 +141,6 @@ async def validation_exception_handler(request: Request, exc: RequestValidationE ) -# Add HTTP exception handler -@app.exception_handler(HTTPException) -async def http_exception_handler(request: Request, exc: HTTPException): - logger.error( - f"HTTP {exc.status_code} for {request.method} {request.url.path}: {exc.detail}" - ) - return JSONResponse( - status_code=exc.status_code, - content={"detail": exc.detail}, - ) - - def run_migrations(): subprocess.run(["alembic", "upgrade", "head"], check=True) @@ -95,6 +154,7 @@ async def on_startup(): run_migrations() logger.info("Base de datos inicializada correctamente.") + # Configurar CORS app.add_middleware( CORSMiddleware, @@ -125,7 +185,7 @@ from api.v1.modules.a76.audit_log.events import register_audit_listeners from api.v1.modules.a76.clients_and_providers.models import ClientProvider from api.v1.modules.a76.customs_brokers.models import CustomsBroker from api.v1.modules.a76.parts.models import Part -from api.v1.modules.a76.items.models import Item +from api.v1.modules.a76.items.models import LineItem from api.v1.modules.a76.general_catalogs.company.models import Company # Reference Data @@ -199,7 +259,7 @@ def register_audit(): Pedimentos, InvoiceHeader, InvoiceSalesDetails, - Item, + LineItem, # Sidebar Core Modules ClientProvider, CustomsBroker, diff --git a/backend/requirements.txt b/backend/requirements.txt index c169f2ca..7480be9f 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -50,4 +50,6 @@ redis==5.0.1 flower==2.0.1 # Barcode -pdf417gen==0.8.1 \ No newline at end of file +pdf417gen==0.8.1 +asgiref==3.8.1 +aiosmtplib==3.0.1 diff --git a/docker-compose.yml b/docker-compose.yml index 041c1bdf..a6dc68de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -272,12 +272,28 @@ services: container_name: worker command: celery -A core.celery_app worker --loglevel=info environment: + - DEBUG=${DEBUG:-True} + - ENVIRONMENT=${ENVIRONMENT:-development} + - PYTHONUNBUFFERED=1 + - PYTHONDONTWRITEBYTECODE=1 + - CORE_DB_HOST=${CORE_DB_HOST:-postgres-a76} + - CORE_DB_PORT=${CORE_DB_PORT:-5432} + - CORE_DB_NAME=${CORE_DB_NAME:-anexo76_core} + - CORE_DB_USER=${CORE_DB_USER:-postgres} + - CORE_DB_PASSWORD=${POSTGRES_APP_PASSWORD:-postgres} + - KEYCLOAK_SERVER_URL=${KEYCLOAK_SERVER_URL:-http://keycloak:8080/kcauth} + - KEYCLOAK_REALM=${KEYCLOAK_REALM:-master} + - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID:-anexo76-backend} + - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-dev-secret} - VALKEY_URL=redis://valkey:6379/0 depends_on: - backend - valkey networks: - backend-net + volumes: + - ./backend:/app + valkey: image: valkey/valkey:7.2 diff --git a/frontend/src/lib/api/dashboard/a24/fa_classes.ts b/frontend/src/lib/api/dashboard/a24/fa_classes.ts index 91359f52..e65f4625 100644 --- a/frontend/src/lib/api/dashboard/a24/fa_classes.ts +++ b/frontend/src/lib/api/dashboard/a24/fa_classes.ts @@ -98,7 +98,7 @@ export const faClassesApi = { * Actualizar una clase de activo fijo existente */ update: (id: number, data: FAClassUpdate, company_id: number): Promise> => { - return api.put(`/v1/a24/fa/classes/${id}?company_id=${company_id}`, data); + return api.put(`/v1/a24/fa/classes/${id}/?company_id=${company_id}`, data); }, /** diff --git a/frontend/src/lib/api/dashboard/a76/classes.ts b/frontend/src/lib/api/dashboard/a76/classes.ts index 236c2cdb..de2a8ca5 100644 --- a/frontend/src/lib/api/dashboard/a76/classes.ts +++ b/frontend/src/lib/api/dashboard/a76/classes.ts @@ -17,6 +17,7 @@ export interface A76Class { sub_key: string; physical_review: number; iva_exempt_fraction: string; + eccn_code?: string | null; is_active?: boolean; // Agregado para el switch del formulario created_at: string; updated_at: string; @@ -35,6 +36,7 @@ export interface A76ClassCreate { sub_key?: string | null; physical_review?: number | null; iva_exempt_fraction?: string | null; + eccn_code?: string | null; is_active?: boolean; } diff --git a/frontend/src/lib/api/dashboard/a76/customs-brokers.ts b/frontend/src/lib/api/dashboard/a76/customs-brokers.ts index 981ef884..f08c1726 100644 --- a/frontend/src/lib/api/dashboard/a76/customs-brokers.ts +++ b/frontend/src/lib/api/dashboard/a76/customs-brokers.ts @@ -22,6 +22,7 @@ export interface CustomsBroker { contact?: string | null; tenant_id: string; company_id: string; + vu?: CustomsBrokerVU | null; } export interface CustomsBrokerVU { diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/company.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/company.ts index 16cd3b02..11b037a1 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/company.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/company.ts @@ -104,7 +104,7 @@ export interface Company { responsible_last_name: string | null; responsible_mother_last_name: string | null; responsible_rfc?: string | null; - position?: string | null; + position?: string | null; has_express_line?: boolean; is_service_company?: boolean; order_format_type?: string | null; @@ -219,7 +219,27 @@ export interface Company { cfdi_xml_save_path?: string | null; cfdi_app_path?: string | null; cfdi_pac_app_path?: string | null; + // Digital Certificates (Flattened) + fiel_cer?: string | null; + fiel_key?: string | null; + fiel_pass?: string | null; + fiel_access?: string | null; + fiel_cer_exp?: number | null; + fiel_key_exp?: number | null; + cfdi_cert_cer?: string | null; + cfdi_cert_key?: string | null; + cfdi_cert_pass?: string | null; + cfdi_cert_access?: string | null; + cfdi_cert_cer_exp?: number | null; + cfdi_cert_key_exp?: number | null; + cancel_cer?: string | null; + cancel_key?: string | null; + cancel_pass?: string | null; + cancel_access?: string | null; + cancel_cer_exp?: number | null; + cancel_key_exp?: number | null; // Submodelos + addresses?: CompanyAddress[]; certification?: CompanyCertification | null; digital_certificates?: CompanyDigitalCertificate[]; @@ -253,31 +273,139 @@ export interface CompanyCreate { order_format_type?: string | null; ctpat_svi?: string | null; trusted_exporter_number?: string | null; + logo?: string | null; + previous_code?: number | null; + client_name?: string | null; + subassembly_mode?: string | null; + inter_db_name?: string | null; + prevalidator_key?: string | null; + seventh_amendment?: boolean; + // Digital Certificates + fiel_cer?: string | null; + fiel_key?: string | null; + fiel_pass?: string | null; + fiel_access?: string | null; + fiel_cer_exp?: number | null; + fiel_key_exp?: number | null; + cfdi_cert_cer?: string | null; + cfdi_cert_key?: string | null; + cfdi_cert_pass?: string | null; + cfdi_cert_access?: string | null; + cfdi_cert_cer_exp?: number | null; + cfdi_cert_key_exp?: number | null; + cancel_cer?: string | null; + cancel_key?: string | null; + cancel_pass?: string | null; + cancel_access?: string | null; + cancel_cer_exp?: number | null; + cancel_key_exp?: number | null; + // Sectores + + sector1?: string | null; + sector2?: string | null; + sector3?: string | null; + // Flags técnicos + active_labels?: number | null; + active_fractions?: number | null; + activate_caat?: number | null; + trans_interface?: number | null; + american_costs?: number | null; + scaf_readonly?: number | null; + parts_replacement?: number | null; + activate_facmexame?: number | null; + part_reference?: number | null; + international_firm?: number | null; + // Configuraciones + ftp_key?: string | null; + sifra_path?: string | null; + version_type?: string | null; + sql_language?: string | null; + balance_operation_mode?: string | null; + // Campos de certificación + is_certified_company?: string | null; + certified_company_registration?: string | null; + certified_company_start_date?: number | null; + certified_company_end_date?: number | null; + annex31_certification_date?: number | null; + annex31_certification_number?: string | null; + annex31_modality?: string | null; + annex31_company_type?: string | null; + annex31_renewal_date?: number | null; + annex31_final_certification_date?: number | null; + is_oea_company?: number | null; + neec_company?: number | null; + // Campos de dirección principal + main_street?: string | null; + main_exterior_number?: string | null; + main_interior_number?: string | null; + main_postal_code?: string | null; + main_neighborhood?: string | null; + main_city?: string | null; + main_municipality?: string | null; + main_state?: string | null; + main_country?: string | null; + main_phone?: string | null; + main_fax?: string | null; + main_email?: string | null; + // Campos de dirección industrial 1 + ind1_street?: string | null; + ind1_exterior_number?: string | null; + ind1_interior_number?: string | null; + ind1_postal_code?: string | null; + ind1_neighborhood?: string | null; + ind1_city?: string | null; + ind1_municipality?: string | null; + ind1_state?: string | null; + ind1_country?: string | null; + ind1_phone?: string | null; + ind1_fax?: string | null; + ind1_email?: string | null; + // Campos de dirección industrial 2 + ind2_street?: string | null; + ind2_exterior_number?: string | null; + ind2_interior_number?: string | null; + ind2_postal_code?: string | null; + ind2_neighborhood?: string | null; + ind2_city?: string | null; + ind2_municipality?: string | null; + ind2_state?: string | null; + ind2_country?: string | null; + ind2_phone?: string | null; + ind2_fax?: string | null; + ind2_email?: string | null; + // Campos de prevalidador + prev_customs?: string | null; + prev_key?: string | null; + prev_patent?: string | null; + prev_description?: string | null; + // Campos de ventanilla única + vu_webservice_user?: string | null; + vu_webservice_password?: string | null; + vu_email?: string | null; + vu_figure_type?: string | null; + vu_central_path?: string | null; + vu_xml_files_path?: string | null; + vu_query_rfc?: string | null; + vu_validation_rfc?: string | null; + vu_configuration_source?: string | null; + vu_measurement_units?: string | null; + // Campos de agente aduanal electrónico + ea_input_folder?: string | null; + ea_output_folder?: string | null; + ea_send_mask?: string | null; + ea_response_mask?: string | null; + ea_response_extension?: string | null; + ea_counter_start?: number | null; + ea_counter_end?: number | null; + ea_counter_next?: number | null; + // Campos de CFDI + cfdi_xml_save_path?: string | null; + cfdi_app_path?: string | null; + cfdi_pac_app_path?: string | null; } -export interface CompanyUpdate { - name?: string | null; - rfc?: string | null; - curp?: string | null; - main_activity?: string | null; - program?: string | null; - program_number?: string | null; - prosec?: number | null; - prosec_authorization?: string | null; - manufacturer_id?: string | null; - broker_company?: string | null; - responsible?: string | null; - responsible_name?: string | null; - responsible_last_name?: string | null; - responsible_mother_last_name?: string | null; - responsible_rfc?: string | null; - position?: string | null; - has_express_line?: boolean; - is_service_company?: boolean; - order_format_type?: string | null; - ctpat_svi?: string | null; - trusted_exporter_number?: string | null; -} +export interface CompanyUpdate extends CompanyCreate { } + export interface CompanyListResponse { items: Company[]; @@ -319,12 +447,12 @@ export async function deleteCompany(id: number): Promise> { export async function uploadCompanyLogo(id: number, file: File): Promise> { const formData = new FormData(); formData.append('file', file); - + // Para FormData, usamos fetch directamente ya que necesitamos omitir Content-Type // para que el navegador establezca el boundary automáticamente const token = localStorage.getItem('access_token'); const API_BASE_URL = (import.meta.env.VITE_API_URL || '').replace(/\/+$/, ''); - + const response = await fetch(`${API_BASE_URL}/v1/a76/company/${id}/upload-logo`, { method: 'POST', headers: { @@ -333,16 +461,50 @@ export async function uploadCompanyLogo(id: number, file: File): Promise> { + const formData = new FormData(); + formData.append('file', file); + if (password) { + formData.append('password', password); + } + + const token = localStorage.getItem('access_token'); + const API_BASE_URL = (import.meta.env.VITE_API_URL || '').replace(/\/+$/, ''); + + const response = await fetch(`${API_BASE_URL}/v1/a76/company/${id}/upload-certificate?certificate_type=${type}`, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}`, + }, + body: formData, + credentials: 'include' + }); + + const data = await response.json(); + + if (!response.ok) { + return { + error: data.detail || data.message || 'Error al subir el certificado', + status: response.status + }; + } + return { data, status: response.status diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/historical-tariff-fractions.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/historical-tariff-fractions.ts new file mode 100644 index 00000000..99d9689a --- /dev/null +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/historical-tariff-fractions.ts @@ -0,0 +1,103 @@ +import { api } from '$lib/api'; +import type { ApiResponse } from '$lib/api'; + +export interface HistoricalFraction { + id: number; + historical_fraction: string | null; + unit_of_measure_code: string | null; + country: string | null; + fraction_type: string | null; + sector: string | null; + import_tax_rate: number | null; + export_tax_rate: number | null; + publication_date: string | null; + is_immex: boolean | null; + normal_temporality: boolean | null; + services_temporality: boolean | null; + certified_temporality: boolean | null; + by_log: boolean | null; + end_date: string | null; +} + +export interface HistoricalFractionCreate { + historical_fraction: string; + unit_of_measure_code?: string | null; + country?: string | null; + fraction_type?: string | null; + sector?: string | null; + import_tax_rate?: number | null; + export_tax_rate?: number | null; + publication_date?: string | null; + is_immex?: boolean | null; + normal_temporality?: boolean | null; + services_temporality?: boolean | null; + certified_temporality?: boolean | null; + by_log?: boolean | null; + end_date?: string | null; +} + +export interface HistoricalFractionUpdate { + historical_fraction?: string; + unit_of_measure_code?: string | null; + country?: string | null; + fraction_type?: string | null; + sector?: string | null; + import_tax_rate?: number | null; + export_tax_rate?: number | null; + publication_date?: string | null; + is_immex?: boolean | null; + normal_temporality?: boolean | null; + services_temporality?: boolean | null; + certified_temporality?: boolean | null; + by_log?: boolean | null; + end_date?: string | null; +} + +export interface HistoricalFractionList { + items: HistoricalFraction[]; + total: number; + page: number; + page_size: number; + pages: number; +} + +export async function getHistoricalFractions( + companyId: number, + historicalFraction?: string, + page = 1, + pageSize = 50 +): Promise { + const params = new URLSearchParams({ + company_id: companyId.toString(), + page: page.toString(), + page_size: pageSize.toString() + }); + + if (historicalFraction) params.append('historical_fraction', historicalFraction); + + const response = await api.get(`/v1/a76/fractions/historical-tariff-fractions/?${params.toString()}`); + if (!response.data) throw new Error('Error fetching historical fractions'); + return response.data; +} + +export async function createHistoricalFraction( + companyId: number, + data: HistoricalFractionCreate +): Promise> { + return await api.post(`/v1/a76/fractions/historical-tariff-fractions/?company_id=${companyId}`, data); +} + +export async function updateHistoricalFraction( + companyId: number, + id: number, + data: HistoricalFractionUpdate +): Promise> { + return await api.put(`/v1/a76/fractions/historical-tariff-fractions/${id}/?company_id=${companyId}`, data); +} + +export async function deleteHistoricalFraction( + companyId: number, + id: number +): Promise> { + return await api.delete(`/v1/a76/fractions/historical-tariff-fractions/${id}/?company_id=${companyId}`); +} diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/tariff-fractions.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/tariff-fractions.ts index 556dd6c7..5da92ab0 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/tariff-fractions.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/tariff-fractions.ts @@ -69,22 +69,33 @@ export async function getTariffFractionById( export async function createTariffFraction( data: TariffFractionCreate, - companyId: number + companyId: number, + catalog = 'mex' ): Promise> { - return await api.post(`/v1/a76/tariff-fractions/?company_id=${companyId}`, data); + return await api.post( + `/v1/a76/tariff-fractions/?company_id=${companyId}&catalog=${catalog}`, + data + ); } export async function updateTariffFraction( id: number, data: TariffFractionUpdate, - companyId: number + companyId: number, + catalog = 'mex' ): Promise> { - return await api.put(`/v1/a76/tariff-fractions/${id}/?company_id=${companyId}`, data); + return await api.put( + `/v1/a76/tariff-fractions/${id}/?company_id=${companyId}&catalog=${catalog}`, + data + ); } export async function deleteTariffFraction( id: number, - companyId: number + companyId: number, + catalog = 'mex' ): Promise> { - return await api.delete(`/v1/a76/tariff-fractions/${id}/?company_id=${companyId}`); + return await api.delete( + `/v1/a76/tariff-fractions/${id}/?company_id=${companyId}&catalog=${catalog}` + ); } diff --git a/frontend/src/lib/api/dashboard/a76/invoice-movements.ts b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts new file mode 100644 index 00000000..5424bc4b --- /dev/null +++ b/frontend/src/lib/api/dashboard/a76/invoice-movements.ts @@ -0,0 +1,203 @@ +/** + * API Client para Reportes de Movimientos de Facturas + */ +import { api } from '$lib/api'; + +// ===== TYPES ===== + +export type RangeType = 'FF' | 'FP'; // FF = fecha factura, FP = fecha pago +export type ReportType = 'Normal' | 'Detallado'; +export type CurrencyType = 'ME' | 'MN'; // ME = moneda extranjera, MN = moneda nacional +export type ExchangeRateType = 'FP' | 'FF'; +export type MovementTypeFilter = 'COMEX' | 'IMPDF' | 'ALL'; +export type DischargeFilter = 'SiDes' | 'NoDes' | 'ALL'; +export type ExportMovementType = 'AFIJO' | 'NODES' | 'SCRAP' | 'REEXP' | 'DONAC' | 'VEMEX' | 'ALL'; + +export interface BaseFilter { + range_type: RangeType; + start_date: string; // YYYYMMDD format + end_date: string; // YYYYMMDD format + include_cancelled: boolean; + provider?: string | null; + buyer?: string | null; + pedimento_code?: string | null; + report_type: ReportType; + currency_type: CurrencyType; + exchange_rate_type: ExchangeRateType; + is_shelter: boolean; + database_name: string; +} + +export interface ImportTemporaryFilter extends BaseFilter { } + +export interface ImportDefinitiveFilter extends BaseFilter { + movement_type: MovementTypeFilter; +} + +export interface ImportRepairFilter extends BaseFilter { + discharge_filter: DischargeFilter; +} + +export interface ExportFilter extends BaseFilter { + movement_type: ExportMovementType; + discharge_filter: DischargeFilter; + use_transport_method: boolean; +} + +export interface ExportRepairFilter extends Omit { + movement_type: ExportMovementType; + discharge_filter: DischargeFilter; +} + +export interface AllMovementsFilter { + range_type: RangeType; + start_date: string; // YYYYMMDD format + end_date: string; // YYYYMMDD format + include_cancelled: boolean; + provider?: string | null; + buyer?: string | null; + pedimento_code?: string | null; + report_type: ReportType; + currency_type: CurrencyType; + exchange_rate_type: ExchangeRateType; + is_shelter: boolean; + operation_type?: 'imp' | 'exp' | null; + send_email?: boolean; + // Granular flags + import_temp?: boolean; + import_def?: boolean; + import_rep?: boolean; + export_def?: boolean; + export_rep?: boolean; + export_types?: string[]; + discharge_filter?: DischargeFilter; +} + +export interface MovementItem { + Factura: string; + Pedimento: string; + FechaFactura: string | null; + Estatus: string; + ClavePed: string; + TipoMovTemDef: string; + EsCambioRegimen: string; + ValorMPTemp: number; + ValorComercialMN: number; + TipoCambio: number; + ValorAgre: number; + TipoExpo: string; + PedimentoR1: string | null; + EDocument: string | null; + NumOperacionVU: string | null; + BaseDeDatos: string; + NumGafUni: string | null; + UsuarioCap: string | null; + UsuarioAcr: string | null; + Fecha_Pago: string | null; + NumCaja: string | null; + Pedimento18: string | null; + AduanaCru: string | null; + Lote: string | null; +} + +export interface MovementItemDetailed extends MovementItem { + Linea: number; + Regimen: string | null; + Fecha_Inicio: string | null; + Fecha_Fin: string | null; + Remesa: string | null; + Proveedor: string | null; + RFCProveedor: string | null; + ProveedorTaxID: string | null; + VendidoA: string | null; + VendidoARFC: string | null; + VendidoATaxID: string | null; + AgenteAduanal: string | null; + Patente: string | null; + NumParte: string | null; + DescripcionE: string | null; + DescripcionI: string | null; + CantidadIE: number; + UniMed: string | null; + PesoNeto: number; + PesoBruto: number; + OrdenCompraVenta: string | null; + FraccionArancelaria: string | null; + Preferencia: string | null; + Sector: string | null; + PaisOrigen: string | null; + Aduana: string | null; + Advalorem: string | null; + Series: string | null; + Marca: string | null; + Modelo: string | null; + FraccionAmericana: string | null; + ECCN: string | null; + SimboloEx: string | null; + FechaEmision: string | null; + Transportista: string | null; +} + +// ===== API METHODS ===== + +export const invoiceMovementsApi = { + // Temporary Imports + getTemporaryImports: (filters: ImportTemporaryFilter) => + api.post('/v1/a76/reports/movements/invoices/temporary', filters), + + getTemporaryImportsDetailed: (filters: ImportTemporaryFilter) => + api.post( + '/v1/a76/reports/movements/invoices/temporary-detailed', + filters + ), + + // Definitive Imports + getDefinitiveImports: (filters: ImportDefinitiveFilter) => + api.post('/v1/a76/reports/movements/invoices/definitive', filters), + + getDefinitiveImportsDetailed: (filters: ImportDefinitiveFilter) => + api.post( + '/v1/a76/reports/movements/invoices/definitive-detailed', + filters + ), + + // Repair Imports + getRepairImports: (filters: ImportRepairFilter) => + api.post('/v1/a76/reports/movements/invoices/repair', filters), + + getRepairImportsDetailed: (filters: ImportRepairFilter) => + api.post( + '/v1/a76/reports/movements/invoices/repair-detailed', + filters + ), + + // Exports + getExports: (filters: ExportFilter) => + api.post('/v1/a76/reports/movements/invoices/export', filters), + + getExportsDetailed: (filters: ExportFilter) => + api.post('/v1/a76/reports/movements/invoices/export-detailed', filters), + + // Export Repairs + getExportRepairs: (filters: ExportRepairFilter) => + api.post('/v1/a76/reports/movements/invoices/export-repair', filters), + + getExportRepairsDetailed: (filters: ExportRepairFilter) => + api.post( + '/v1/a76/reports/movements/invoices/export-repair-detailed', + filters + ), + + // All Movements + getAllMovements: (filters: AllMovementsFilter) => + api.post('/v1/a76/reports/movements/invoices/all', filters), + + // Async Generation + generateReportAsync: (filters: AllMovementsFilter) => + api.post<{ task_id: string }>('/v1/a76/reports/movements/invoices/generate', filters), + + getTaskStatus: (taskId: string) => + api.get<{ task_id: string; status: string; result?: any; meta?: any }>( + `/v1/a76/reports/movements/invoices/task/${taskId}` + ) +}; diff --git a/frontend/src/lib/api/dashboard/a76/invoices.ts b/frontend/src/lib/api/dashboard/a76/invoices.ts index ea5c2194..3e537e6d 100644 --- a/frontend/src/lib/api/dashboard/a76/invoices.ts +++ b/frontend/src/lib/api/dashboard/a76/invoices.ts @@ -319,6 +319,7 @@ export interface UpdateInvoiceData { cfdi_uuid?: string | null; path_pdf?: string | null; path_xml?: string | null; + is_updated?: boolean | null; compliance_mx?: Partial | null; financials?: Partial | null; logistics?: Partial[] | null; diff --git a/frontend/src/lib/api/dashboard/a76/items.ts b/frontend/src/lib/api/dashboard/a76/items.ts index 1ec5e69d..2b10b734 100644 --- a/frontend/src/lib/api/dashboard/a76/items.ts +++ b/frontend/src/lib/api/dashboard/a76/items.ts @@ -17,7 +17,11 @@ export interface LineCustoms { origin_country?: string; destination_country?: string; advalorem?: string; - advalorem_american?: number; // Backend: Decimal + advalorem_numeric?: number; + advalorem_american?: number; + advalorem_tlcan?: number; + rate?: string; + depreciation_rate?: number; sector?: string; } @@ -31,11 +35,13 @@ export interface LineFinancials { unit_cost_commercial_usd?: number; // Values + value_mc?: number; value_usd?: number; value_mxn?: number; value_returned_usd?: number; value_returned_mxn?: number; customs_value_usd?: number; + customs_value_mxn?: number; } export interface LineQuantities { @@ -105,8 +111,7 @@ export interface FaLineItem { // Subitems is_subitem?: boolean; - contains_subitems?: boolean; - includes_subitems?: boolean; + contains_subitems?: boolean; subitem_number?: number; // Special flags @@ -119,9 +124,9 @@ export interface FaLineItem { updated_at?: string; } -export interface LineItem { - id?: number; - item_id?: number; +export interface Item { + id?: number; + invoice_id: number; line_number: number; // Identification @@ -159,20 +164,7 @@ export interface LineItem { class_description?: string; // Computed field from unit_of_measure_info relation - unit_of_measure_code?: string; - - // Nested relations (Singular names to match backend Pydantic models) - customs?: LineCustoms; - financial?: LineFinancials; - quantity?: LineQuantities; - description?: LineDescriptions; - reference?: LineReferences; - fa_data?: FaLineItem; // Fixed Asset specific data -} - -export interface Item { - id?: number; - invoice_id: number; + unit_of_measure_code?: string; reference_number?: string; order?: string; guide_number?: string; @@ -182,8 +174,14 @@ export interface Item { location?: string; created_at?: string; updated_at?: string; - - lines?: LineItem[]; + + // Nested relations (Singular names to match backend Pydantic models) + customs?: LineCustoms; + financial?: LineFinancials; + quantity?: LineQuantities; + description?: LineDescriptions; + reference?: LineReferences; + fa_data?: FaLineItem; // Fixed Asset specific data } export interface ItemListResponse { @@ -193,28 +191,11 @@ export interface ItemListResponse { limit: number; } -export interface CreateItemData { +export interface CreateItemData extends Omit { invoice_id: number; - reference_number?: string; - order?: string; - guide_number?: string; - depreciation_date?: number; - rectification?: number; - warehouse?: string; - location?: string; - lines?: LineItem[]; } -export interface UpdateItemData { - reference_number?: string; - order?: string; - guide_number?: string; - depreciation_date?: number; - rectification?: boolean; - warehouse?: string; - location?: string; - lines?: LineItem[]; -} +export interface UpdateItemData extends Partial> {} /** * API para Items diff --git a/frontend/src/lib/api/dashboard/a76/pedimentos.ts b/frontend/src/lib/api/dashboard/a76/pedimentos.ts index a5069c9f..582e913d 100644 --- a/frontend/src/lib/api/dashboard/a76/pedimentos.ts +++ b/frontend/src/lib/api/dashboard/a76/pedimentos.ts @@ -10,12 +10,12 @@ export interface PedimentoDates { pedimento_date?: string | null; payment_date?: string | null; rectification_payment_date?: string | null; - extraction_date?: string | null; + extraction_date?: string | null; submission_date?: string | null; eucan_date?: string | null; - original_date?: string | null; - start_date?: string | null; - end_date?: string | null; + original_date?: string | null; + start_date?: string | null; + end_date?: string | null; } export interface PedimentoPayments { @@ -279,9 +279,9 @@ export const pedimentosApi = { * @param filters - Filtros opcionales * @param companyId - ID de la compañía (por defecto 1) */ - list: (page = 1, pageSize = 50, filters?: PedimentoFilters, companyId = 1) => { + list: (page = 1, pageSize = 50, filters?: PedimentoFilters, companyId?: number) => { let url = `/v1/a76/pedimentos/?company_id=${companyId}&page=${page}&page_size=${pageSize}`; - + if (filters?.status) { url += `&status=${encodeURIComponent(filters.status)}`; } @@ -291,7 +291,7 @@ export const pedimentosApi = { if (filters?.year) { url += `&year=${encodeURIComponent(filters.year)}`; } - + return api.get(url); }, @@ -300,14 +300,14 @@ export const pedimentosApi = { * @param id - ID del pedimento * @param companyId - ID de la compañía (por defecto 1) */ - get: (id: number, companyId = 1) => api.get(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`), + get: (id: number, companyId?: number) => api.get(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`), /** * Crea un nuevo pedimento * @param data - Datos del pedimento a crear * @param companyId - ID de la compañía (por defecto 1) */ - create: (data: CreatePedimentoData, companyId = 1) => + create: (data: CreatePedimentoData, companyId?: number) => api.post(`/v1/a76/pedimentos/?company_id=${companyId}`, data), /** @@ -316,7 +316,7 @@ export const pedimentosApi = { * @param data - Datos a actualizar * @param companyId - ID de la compañía (por defecto 1) */ - update: (id: number, data: UpdatePedimentoData, companyId = 1) => + update: (id: number, data: UpdatePedimentoData, companyId?: number) => api.put(`/v1/a76/pedimentos/${id}/?company_id=${companyId}`, data), /** @@ -324,5 +324,5 @@ export const pedimentosApi = { * @param id - ID del pedimento a eliminar * @param companyId - ID de la compañía (por defecto 1) */ - delete: (id: number, companyId = 1) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`) + delete: (id: number, companyId?: number) => api.delete(`/v1/a76/pedimentos/${id}?company_id=${companyId}`) }; diff --git a/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts b/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts new file mode 100644 index 00000000..f95b0ade --- /dev/null +++ b/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts @@ -0,0 +1,95 @@ + +const BASE_URL = import.meta.env.VITE_API_URL || ''; + +export const reportsTransmissionApi = { + + triggerGeneration: async (request: any) => { + const endpoint = `${BASE_URL}/v1/a76/reports/exportacion/transmission/generate`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request) + }); + + if (!response.ok) throw new Error('Error al iniciar la generación del archivo de transmisión'); + return await response.json(); + }, + + getTaskStatus: async (taskId: string) => { + const endpoint = `${BASE_URL}/v1/a76/reports/exportacion/transmission/tasks/${taskId}`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'GET', + headers: { 'Authorization': `Bearer ${token}` } + }); + + if (!response.ok) throw new Error('Error al consultar estado de la transmisión'); + return await response.json(); + }, + + triggerTemporalGeneration: async (request: any) => { + const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/temporal/generate`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request) + }); + + if (!response.ok) throw new Error('Error al iniciar la generación temporal'); + return await response.json(); + }, + + getTemporalTaskStatus: async (taskId: string) => { + const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/temporal/tasks/${taskId}`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'GET', + headers: { 'Authorization': `Bearer ${token}` } + }); + + if (!response.ok) throw new Error('Error al consultar estado de la transmisión temporal'); + return await response.json(); + }, + + triggerDefinitiveGeneration: async (request: any) => { + const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/definitive/generate`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(request) + }); + + if (!response.ok) throw new Error('Error al iniciar la generación definitiva'); + return await response.json(); + }, + + getDefinitiveTaskStatus: async (taskId: string) => { + const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/definitive/tasks/${taskId}`; + + const token = localStorage.getItem('access_token'); + const response = await fetch(endpoint, { + method: 'GET', + headers: { 'Authorization': `Bearer ${token}` } + }); + + if (!response.ok) throw new Error('Error al consultar estado de la transmisión definitiva'); + return await response.json(); + } +}; diff --git a/frontend/src/lib/api/dashboard/general_catalogs/canadian.ts b/frontend/src/lib/api/dashboard/general_catalogs/canadian.ts new file mode 100644 index 00000000..0b5b73f2 --- /dev/null +++ b/frontend/src/lib/api/dashboard/general_catalogs/canadian.ts @@ -0,0 +1,77 @@ + +import { api } from '$lib/api'; + +export interface CanadianFraction { + id: number; + fraction: string; + ad_valorem: number | null; + unit_of_measure: string | null; + country_code: string; + description: string | null; + created_at: string; + updated_at: string; +} + +export interface CanadianFractionList { + items: CanadianFraction[]; + total: number; + page: number; + page_size: number; + pages: number; +} + +export interface CanadianFractionCreate { + fraction: string; + ad_valorem?: number; + unit_of_measure?: string; + country_code: string; + description?: string; +} + +export interface CanadianFractionUpdate { + fraction?: string; + ad_valorem?: number; + unit_of_measure?: string; + country_code?: string; + description?: string; +} + +const BASE_URL = '/v1/a76/fractions/canadian-tariff-fractions/'; + +export async function getCanadianFractions( + companyId: number, + page = 1, + pageSize = 50, + search?: string +): Promise { + const params = new URLSearchParams({ + company_id: companyId.toString(), + page: page.toString(), + page_size: pageSize.toString() + }); + + if (search) params.append('search', search); + + const response = await api.get(`${BASE_URL}?${params.toString()}`); + if (!response.data) throw new Error('Error fetching Canadian fractions'); + return response.data; +} + +export async function createCanadianFraction(companyId: number, data: CanadianFractionCreate): Promise { + const params = new URLSearchParams({ company_id: companyId.toString() }); + const response = await api.post(`${BASE_URL}?${params.toString()}`, data); + if (!response.data) throw new Error('Error creating Canadian fraction'); + return response.data; +} + +export async function updateCanadianFraction(companyId: number, id: number, data: CanadianFractionUpdate): Promise { + const params = new URLSearchParams({ company_id: companyId.toString() }); + const response = await api.put(`${BASE_URL}${id}?${params.toString()}`, data); + if (!response.data) throw new Error('Error updating Canadian fraction'); + return response.data; +} + +export async function deleteCanadianFraction(companyId: number, id: number): Promise { + const params = new URLSearchParams({ company_id: companyId.toString() }); + await api.delete(`${BASE_URL}${id}?${params.toString()}`); +} diff --git a/frontend/src/lib/api/dashboard/general_catalogs/sectors.ts b/frontend/src/lib/api/dashboard/general_catalogs/sectors.ts new file mode 100644 index 00000000..b92acd2f --- /dev/null +++ b/frontend/src/lib/api/dashboard/general_catalogs/sectors.ts @@ -0,0 +1,35 @@ + +import { api } from '$lib/api'; +import type { ApiResponse } from '$lib/api'; + +export interface Sector { + key: string; + description: string; + authorized: boolean; +} + +export interface SectorListResponse { + items: Sector[]; + total: number; + page: number; + page_size: number; +} + +export async function getSectors( + page = 1, + pageSize = 50, + search?: string +): Promise { + const params = new URLSearchParams({ + page: page.toString(), + page_size: pageSize.toString() + }); + + if (search) { + params.append('search', search); + } + + const response = await api.get(`/v1/public/reference_data/sectors/?${params.toString()}`); + if (!response.data) throw new Error('Error fetching sectors'); + return response.data; +} diff --git a/frontend/src/lib/components/dashboard/csv-upload/ConfigFooter.svelte b/frontend/src/lib/components/dashboard/csv-upload/ConfigFooter.svelte new file mode 100644 index 00000000..1adb87aa --- /dev/null +++ b/frontend/src/lib/components/dashboard/csv-upload/ConfigFooter.svelte @@ -0,0 +1,96 @@ + + + +
+
+
+ + Configuración: {activeTab} +
+ + {#if currentFields.length > 0} +
+ {#each currentFields as field} +
+ {#if field.type !== 'boolean'} + + {/if} + + {#if field.type === 'text'} + + {:else if field.type === 'boolean'} +
+ + +
+ {:else if field.type === 'select' && field.options} + + {:else if field.type === 'radio' && field.options} + + {#each field.options as opt} +
+ + +
+ {/each} +
+ {/if} +
+ {/each} +
+ {:else} +
+ No hay configuraciones específicas para este módulo. +
+ {/if} +
+
diff --git a/frontend/src/lib/components/dashboard/csv-upload/ProcessingResultModal.svelte b/frontend/src/lib/components/dashboard/csv-upload/ProcessingResultModal.svelte new file mode 100644 index 00000000..7375b3ab --- /dev/null +++ b/frontend/src/lib/components/dashboard/csv-upload/ProcessingResultModal.svelte @@ -0,0 +1,275 @@ + + + + + +
+
+ {#if isPending} + + {:else if isFinished && !hasErrors} + + {:else} + + {/if} +
+ +
+ + {#if isPending} + Validación de Importación + {:else if isFinished} + {hasErrors ? 'Importación con Observaciones' : 'Importación Exitosa'} + {/if} + + + {#if isPending} + Revise el análisis preliminar antes de confirmar la carga de datos. + {:else if isFinished} + El proceso de importación ha finalizado. + {/if} + +
+
+ + +
+ + {#if isPending} +
+ +
+ Total Filas + {scanResults.total_rows || 0} +
+ + +
+ Válidos + {scanResults.valid_rows || 0} +
+ + +
+ Errores + {scanResults.error_count || 0} +
+
+ + {#if scanResults.error_count > 0} +
+ +
+

Se detectaron problemas en el archivo

+

+ Las filas con errores serán omitidas automáticamente. Solo se importarán los + registros válidos. +

+
+
+ {:else} +
+ +
+

Archivo validado correctamente

+

Todos los registros parecen correctos y listos para importar.

+
+
+ {/if} + {/if} + + + {#if isFinished} +
+ +
+ +
+
+ + Insertados +
+ {commitResults.inserted || 0} +
+ + +
+
+ + Rechazados +
+ {totalSkipped} +
+
+ + + {#if commitResults.skipped_details && commitResults.skipped_details.length > 0} +
+
+
+ Detalle de Errores +
+ + {commitResults.skipped_details.length} filas + +
+
+ + + + + + + + + + {#each commitResults.skipped_details as detail} + + + + + + {/each} + +
LíneaReferenciaMotivo
{detail.line}{detail.invoice || '-'}{detail.reason}
+
+
+ {/if} +
+ {/if} +
+ + +
+ {#if isPending} + + + {:else if isFinished} + + {/if} +
+
+
diff --git a/frontend/src/lib/components/dashboard/csv-upload/UniversalUploadModal.svelte b/frontend/src/lib/components/dashboard/csv-upload/UniversalUploadModal.svelte new file mode 100644 index 00000000..721cd901 --- /dev/null +++ b/frontend/src/lib/components/dashboard/csv-upload/UniversalUploadModal.svelte @@ -0,0 +1,123 @@ + + + + + + + {#if config.icon} + + {/if} + Importar {config.title} + + + Selecciona tu archivo CSV para procesar. +
+ + La configuración activa del pie de página se aplicará a esta carga. + +
+
+ +
+ +
+
+ + {#if file} + +
+ {file.name} + {(file.size / 1024).toFixed(2)} KB +
+ {:else} + + Arrastra tu archivo aquí o haz clic + Soporta CSV, TXT + {/if} +
+
+ + + {#if Object.keys(currentSettings).length > 0} +
+ Configuración Activa: +
    + {#each Object.entries(currentSettings) as [key, value]} +
  • {key}: {value}
  • + {/each} +
+
+ {/if} +
+ + + + + +
+
diff --git a/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte b/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte new file mode 100644 index 00000000..8084f135 --- /dev/null +++ b/frontend/src/lib/components/dashboard/csv-upload/UploadLauncherGrid.svelte @@ -0,0 +1,264 @@ + + +
+ {#if groupedItems.ungrouped.length > 0} +
+ {#each groupedItems.ungrouped as item} +
handleDragEnter(e, item.id, item.disabled)} + ondragleave={handleDragLeave} + ondragover={(e) => handleDragOver(e, item.disabled)} + ondrop={(e) => handleDrop(e, item)} + oncontextmenu={(e) => handleContextMenu(e, item)} + roles="button" + tabindex={item.disabled ? -1 : 0} + onclick={() => handleClick(item.id, item.disabled)} + onkeydown={(e) => !item.disabled && e.key === 'Enter' && handleClick(item.id)} + > + handleFileChange(e, item)} + disabled={item.disabled} + /> + + + {#if item.disabled} +
+ + Próximamente + +
+ {/if} + + + {#if !item.disabled && dragOverId === item.id} +
+ +
+ ¡Suelta el archivo! + {:else} +
+ +
+
{item.title}
+ {/if} +
+
+
+ {/each} +
+ {/if} + + {#each Object.entries(groupedItems.groups) as [groupName, groupItems]} +
+

+ {groupName} +

+
+ {#each groupItems as item} +
handleDragEnter(e, item.id, item.disabled)} + ondragleave={handleDragLeave} + ondragover={(e) => handleDragOver(e, item.disabled)} + ondrop={(e) => handleDrop(e, item)} + oncontextmenu={(e) => handleContextMenu(e, item)} + role="button" + tabindex={item.disabled ? -1 : 0} + onclick={() => handleClick(item.id, item.disabled)} + onkeydown={(e) => !item.disabled && e.key === 'Enter' && handleClick(item.id)} + > + handleFileChange(e, item)} + disabled={item.disabled} + /> + + + {#if item.disabled} +
+ + Próximamente + +
+ {/if} + + + {#if !item.disabled && dragOverId === item.id} +
+ +
+ ¡Suelta el archivo! + {:else} +
+ +
+
{item.title}
+ {/if} +
+
+
+ {/each} +
+
+ {/each} +
diff --git a/frontend/src/lib/components/dashboard/customs_brokers/columns.ts b/frontend/src/lib/components/dashboard/customs_brokers/columns.ts index 24400b55..3ea92e34 100644 --- a/frontend/src/lib/components/dashboard/customs_brokers/columns.ts +++ b/frontend/src/lib/components/dashboard/customs_brokers/columns.ts @@ -28,8 +28,12 @@ export function createColumns(onSuccess?: () => void): ColumnDef[ cell: ({ row }) => { const typeSnippet = createRawSnippet<[{ type: string | null | undefined }]>((getType) => { const { type } = getType(); + let display = type || '-'; + if (type === 'MEX') display = 'Agente Aduanal Mexicano'; + else if (type === 'USA') display = 'Agente Aduanal Americano (Broker)'; + return { - render: () => `
${type || '-'}
` + render: () => `
${display}
` }; }); return renderSnippet(typeSnippet, { type: row.original.type }); @@ -68,8 +72,8 @@ export function createColumns(onSuccess?: () => void): ColumnDef[ const postalSnippet = createRawSnippet<[{ postal: string | null | undefined }]>((getPostal) => { const { postal } = getPostal(); return { - render: () => - postal + render: () => + postal ? `${postal}` : `-` }; @@ -136,8 +140,8 @@ export function createColumns(onSuccess?: () => void): ColumnDef[ const licenseSnippet = createRawSnippet<[{ license: string | null | undefined }]>((getLicense) => { const { license } = getLicense(); return { - render: () => - license + render: () => + license ? `${license}` : `-` }; @@ -175,9 +179,9 @@ export function createColumns(onSuccess?: () => void): ColumnDef[ id: "actions", header: "Acciones", cell: ({ row }) => { - return renderComponent(DataTableActions, { + return renderComponent(DataTableActions, { broker: row.original, - onSuccess + onSuccess }); } } diff --git a/frontend/src/lib/components/dashboard/general_catalogs/sectors/SectorsList.svelte b/frontend/src/lib/components/dashboard/general_catalogs/sectors/SectorsList.svelte new file mode 100644 index 00000000..78137b1f --- /dev/null +++ b/frontend/src/lib/components/dashboard/general_catalogs/sectors/SectorsList.svelte @@ -0,0 +1,188 @@ + + +
+
+

{title}

+
+ + + +
+
+ + +
+
+
+ +
+ + + + Clave + Descripción + Estatus + + + + {#if loading && page === 1} + + +
+ +
+
+
+ {:else if sectors.length === 0} + + + No se encontraron sectores. + + + {:else} + {#each sectors as sector} + + {sector.key} + {sector.description} + + {#if sector.authorized} + Autorizado + {:else} + No Autorizado + {/if} + + + {/each} + {/if} + {#if loading && page > 1} + + +
+ +
+
+
+ {/if} +
+
+
+ +
+
+ Mostrando {sectors.length} de {total} registros +
+ +
+
+
+
+
diff --git a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte index e0977939..fb406f32 100644 --- a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte +++ b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte @@ -732,18 +732,14 @@
- -
- - -
+ +
diff --git a/frontend/src/lib/components/dashboard/goods/fractions/CanadianFractionDialog.svelte b/frontend/src/lib/components/dashboard/goods/fractions/CanadianFractionDialog.svelte new file mode 100644 index 00000000..2ccf045e --- /dev/null +++ b/frontend/src/lib/components/dashboard/goods/fractions/CanadianFractionDialog.svelte @@ -0,0 +1,180 @@ + + + + + + {fraction ? 'Editar' : 'Crear'} Fracción Canadiense + + {fraction + ? 'Modifica los detalles de la fracción seleccionada.' + : 'Ingresa los datos para la nueva fracción.'} + + + +
+
+
+ + +
+
+ + +
+
+ +
+ +
-
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte index be1ec0f3..97b1757e 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/item-sheet-fa.svelte @@ -38,7 +38,7 @@ } = $props(); // Acceso directo a la primera línea para evitar repeticiones en el HTML - let line = $derived(editingItem.lines?.[0]); + let line = $derived(editingItem); @@ -77,10 +77,11 @@
@@ -93,8 +94,8 @@
@@ -125,36 +126,38 @@
- + - + - +
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/main-data.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/main-data.svelte index 1b6b916f..8011fde5 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/main-data.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/main-data.svelte @@ -7,19 +7,22 @@ import CountryDialog from './country-dialog.svelte'; import TariffFractionDialog from './tariff-fraction-dialog.svelte'; import ClassDialog from './class-dialog.svelte'; - import type { LineItem, LineQuantities, LineFinancials, LineCustoms } from '$lib/api/dashboard/a76/items'; - import { companyStore } from '$lib/stores/company.svelte'; + import type { Item, LineQuantities, LineFinancials, LineCustoms } from '$lib/api/dashboard/a76/items'; + import type { Invoice } from '$lib/api/dashboard/a76/invoices'; + import { companyStore } from '$lib/stores/company.svelte'; let { lineItem = $bindable(), quantities = $bindable(), financials = $bindable(), - customs = $bindable() + customs = $bindable(), + invoice }: { - lineItem: LineItem; + lineItem: Partial; quantities: LineQuantities; financials: LineFinancials; customs: LineCustoms; + invoice: Invoice | null; } = $props(); let showClassDialog = $state(false); @@ -27,16 +30,26 @@ let showCountryDialog = $state(false); let showFractionDialog = $state(false); + // Format fraction with dots for display + let fractionDisplay = $derived(() => { + const frac = customs.fraction; + if (!frac) return ''; + // If already has dots, return as is + if (frac.includes('.')) return frac; + // Format 8-digit fraction as XX.XX.XX.XX + if (frac.length === 8) { + return `${frac.slice(0, 4)}.${frac.slice(4, 6)}.${frac.slice(6, 8)}`; + } + // Format 10-digit fraction as XX.XX.XX.XXXX + if (frac.length === 10) { + return `${frac.slice(0, 4)}.${frac.slice(4, 6)}.${frac.slice(6, 8)}.${frac.slice(8, 10)}`; + } + return frac; + }); + // Track previous class_id to detect changes let previousClassId = $state(undefined); - // Initialize from existing data - $effect(() => { - if (lineItem.class_code) { - // Do nothing, it's already set - } - }); - // Watch for class_id changes and update descriptions automatically $effect(() => { const currentClassId = lineItem.class_id; @@ -97,10 +110,10 @@ (lineItem as any).description.description_english = classItem.description_en; } } - } + }; function handleUnitSelect(unit: any) { - lineItem.unit_of_measure = unit.id; + lineItem.unit_of_measure = unit.id; // Store unit code for display (lineItem as any).unit_code = unit.code; (lineItem as any).unit_description = unit.description || unit.description_en; @@ -112,9 +125,50 @@ } function handleFractionSelect(fraction: any) { - customs.fraction = fraction.fraction; + // Save without dots for backend, concatenating fraction + nico (8 + 2 = 10 chars) + const fractionBase = fraction.fraction?.replace(/\./g, '') || ''; + const nico = fraction.nico || ''; + customs.fraction = fractionBase + nico; (customs as any).fraction_description = fraction.description; } + + // Auto-fetch historical tariff rate when fraction, country, type, and date are available + $effect(() => { + const fraction = customs.fraction?.replace(/\./g, '') || ''; + const nico = fraction.substring(8, 10); + const fractionType = customs.fraction_type; + const invoiceDate = invoice?.invoice_date; + + // Only fetch if all required fields are present and fraction has at least 8 chars + if (fraction && fraction.length >= 8 && nico && fractionType && invoiceDate) { + const historicalFraction = fraction.substring(0, 8); + const params = new URLSearchParams({ + historical_fraction: historicalFraction, + nico: nico, + fraction_type: fractionType, + invoice_date: invoiceDate + }); + + fetch(`/api-sveltekit/historical-tariff-fractions/rate?${params}`) + .then(response => { + if (response.ok) { + return response.json(); + } + throw new Error('Failed to fetch tariff rate'); + }) + .then(data => { + if (data.found && data.rate !== null) { + customs.rate = data.rate; + } else { + customs.rate = '0'; + } + }) + .catch(error => { + console.error('Error fetching historical tariff rate:', error); + // Keep current value on error + }); + } + }); @@ -186,7 +240,7 @@
- + USD
@@ -196,7 +250,7 @@
-
- {#if (customs as any).origin_country_name} -

{(customs as any).origin_country_name}

- {/if} +
- @@ -255,7 +305,7 @@
Advalorem: - {customs.advalorem || '0'} + {customs.rate || '0'}
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte new file mode 100644 index 00000000..81f228e8 --- /dev/null +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte @@ -0,0 +1,153 @@ + + + + + + CATALOGO DE ESTADOS + + +
+
+ + +
+
+ +
+ {#if loading} +
+ +
+ {:else if error} +
+

{error}

+
+ {:else} +
+ + + + + + + + + + + {#each filteredItems as item} + handleSelect(item)} + > + + + + + + {/each} + {#if filteredItems.length === 0} + + + + {/if} + +
Clave M3Clave MexClave AmeDescripción
{item.m3_key || ''}{item.mex_key || ''}{item.ame_key || ''}{item.description || ''}
+ No se encontraron resultados +
+
+ {/if} +
+ +
+ +
+
+
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/summary-section.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/summary-section.svelte index 0320095a..554f20d5 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/summary-section.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/summary-section.svelte @@ -1,13 +1,82 @@
@@ -27,7 +96,7 @@
WEIGHTS (Pounds)
Net: {formatNumber(quantities.net_weight)}
0.00000000
-
Whole: {formatNumber(quantities.gross_weight)}
+
Gross: {formatNumber(quantities.gross_weight)}
0.00000000
@@ -43,9 +112,11 @@
{formatNumber(financials.unit_cost_mxn)}
Value: {formatNumber(financials.value_usd)}
{formatNumber(financials.value_mxn)}
-
Capture Cost: {formatNumber(financials.unit_cost_capture)} USD
-
Capture Value: {formatNumber(financials.value_usd)} USD
-
Customs Value: {formatNumber(financials.customs_value_usd)} USD
+
Customs Value: {formatNumber(financials.customs_value_usd)}
+
Customs Value: {formatNumber(financials.customs_value_mxn)}
+
Capture Cost: {formatNumber(financials.unit_cost_capture)} {invoiceCurrency}
+
+
Capture Value: {formatNumber(financials.value_mc)} {invoiceCurrency}
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-continuation.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-continuation.svelte index e3111bde..8a6e7541 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-continuation.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-continuation.svelte @@ -5,14 +5,14 @@ import { Checkbox } from '$lib/components/ui/checkbox'; import { Button } from '$lib/components/ui/button'; import { Folder } from 'lucide-svelte'; - import type { LineItem, LineDescriptions } from '$lib/api/dashboard/a76/items'; + import type { Item, LineDescriptions } from '$lib/api/dashboard/a76/items'; import PaymentMethodDialog from './payment-method-dialog.svelte'; let { lineItem = $bindable(), descriptions = $bindable() }: { - lineItem: LineItem; + lineItem: Partial; descriptions: LineDescriptions; } = $props(); @@ -26,6 +26,14 @@ lineItem.has_certificate = val === 'si'; } + // Initialize boolean fields to prevent bind:checked={undefined} error + if (lineItem.is_military_mcia === undefined) { + lineItem.is_military_mcia = false; + } + if (descriptions.consider_a31 === undefined) { + descriptions.consider_a31 = false; + } + let paymentMethodDialogOpen = $state(false); let payment_method_description = $state(''); diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-identifiers.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-identifiers.svelte index dd5d1e5e..9b77f822 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-identifiers.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/fa/tab-identifiers.svelte @@ -1,9 +1,9 @@
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte index 0729433b..13b20bf5 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/inv/item-sheet-inv.svelte @@ -2,14 +2,16 @@ import * as Sheet from '$lib/components/ui/sheet'; import * as Tabs from '$lib/components/ui/tabs'; import { Input } from '$lib/components/ui/input'; + import { Textarea } from '$lib/components/ui/textarea'; import { Label } from '$lib/components/ui/label'; import { Button } from '$lib/components/ui/button'; import { Badge } from '$lib/components/ui/badge'; - import { Loader2, FileText } from 'lucide-svelte'; + import { Loader2, FileText, Folder } from 'lucide-svelte'; import type { Invoice } from '$lib/api/dashboard/a76/invoices'; import type { Item } from '$lib/api/dashboard/a76/items'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; import { obtenerAtajosPestanasItemInv } from '$lib/config/shortcuts/dashboard/invoices/item/inventory'; + import PartNumberDialog from '../fa/part-number-dialog.svelte'; let { open = $bindable(), @@ -34,6 +36,7 @@ } = $props(); let activeTab = $state('general'); + let showPartDialog = $state(false); const tabMapping: Record = { tab1: 'general', @@ -42,6 +45,19 @@ tab4: 'otros' }; + function handlePartSelect(part: any) { + editingItem.part_number = part.id; + // Store part number for display + (editingItem as any).part_number_display = part.part_number; + if (editingItem.description) { + editingItem.description.description_spanish = part.description_spanish; + editingItem.description.description_english = part.description_english; + } + if (editingItem.customs) { + editingItem.customs.fraction = part.fraction; + } + } + useShortcuts( 'Invoice Item Form (Inventory)', obtenerAtajosPestanasItemInv({ @@ -55,24 +71,21 @@ ); // Derived state for easier binding and safety - let line = $derived(editingItem.lines?.[0]); + let line = $derived(editingItem); // Initialize missing nested objects if they don't exist $effect(() => { if (open && editingItem) { - if (!editingItem.lines) editingItem.lines = [{ line_number: 1 } as any]; - if (editingItem.lines[0] && !editingItem.lines[0].quantity) - editingItem.lines[0].quantity = {} as any; - if (editingItem.lines[0] && !editingItem.lines[0].financial) - editingItem.lines[0].financial = {} as any; - if (editingItem.lines[0] && !editingItem.lines[0].customs) - editingItem.lines[0].customs = {} as any; - if (editingItem.lines[0] && !editingItem.lines[0].description) - editingItem.lines[0].description = {} as any; + if (editingItem && !editingItem.quantity) editingItem.quantity = {} as any; + if (editingItem && !editingItem.financial) editingItem.financial = {} as any; + if (editingItem && !editingItem.customs) editingItem.customs = {} as any; + if (editingItem && !editingItem.description) editingItem.description = {} as any; } }); + +
1} + {#if editingItem} - {editingItem.lines.length} items en esta partida + {editingItem} items en esta partida {/if} @@ -194,11 +207,19 @@
{#if line} - +
+ (showPartDialog = true)} + /> + +
{/if}
@@ -228,20 +249,20 @@
{#if line?.description} - {/if}
{#if line?.description} - {/if}
@@ -364,7 +385,7 @@ {/if}
@@ -378,7 +399,7 @@ id="imported_quantity" type="number" placeholder="0" - bind:value={(line.quantity as any).quantity_imported} + bind:value={(line.quantity as any).quantity_imported} /> {/if}
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte index 82d25695..372198ff 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/items/items-tab-form.svelte @@ -74,26 +74,24 @@ // 4. Derived Values (Ordered correctly to avoid TDZ) const flattenedLines = $derived.by(() => { const sourceItems = items?.length ? items : formData?.items || []; - return (sourceItems || []).flatMap((item: any, itemIndex: number) => { - const lines = item?.lines || []; - return lines.map((line: any, idx: number) => ({ - ...line, - id: line?.id || `${item?.id || itemIndex}-line-${line?.line_number ?? idx + 1}`, - line_number: line?.line_number ?? idx + 1, - reference_number: line?.reference_number ?? item?.reference_number, - is_subitem: line?.is_subitem ?? false, - class_code: line?.class_code ?? line?.class_id, - class_description: - line?.class_description || - line?.description?.description_spanish || - line?.description?.description_english || - '', - unit_of_measure_code: line?.quantity?.unit_of_measure || line?.unit_of_measure, - fa_data: line?.fa_data || {}, - warehouse: line?.warehouse || item?.warehouse, - full_item: item - })); - }); + return (sourceItems || []).map((item: any, itemIndex: number) => ({ + ...item, + id: item?.id || `item-${itemIndex}`, + line_number: item?.line_number ?? itemIndex + 1, + reference_number: item?.reference_number, + is_subitem: item?.is_subitem ?? false, + class_code: item?.class_code ?? item?.class_id, + class_description: + item?.class_description || + item?.description?.description_spanish || + item?.description?.description_english || + '', + unit_of_measure_code: item?.quantity?.unit_of_measure || item?.unit_of_measure, + part_number_display: (item as any).part_number_display || item?.part_number, + fa_data: item?.fa_data || {}, + warehouse: item?.warehouse, + full_item: item + })); }); const isAllSelected = $derived( @@ -248,80 +246,76 @@ // Auto-asignar valores desde la factura con estructura completa editingItem = { invoice_id: invoice?.id, + line_number: 1, + // LineItem fields + part_number: undefined, + component_part_number: undefined, + class_id: undefined, + identifier: undefined, + unit_of_measure: undefined, + alternate_unit: undefined, + permit_number: undefined, + page_line: undefined, + has_certificate: false, + certificate_number: undefined, + tax_payment: false, + payment_method: undefined, + igi_amount: undefined, + is_military_mcia: false, + wildcard_field: undefined, reference_number: '', order: invoice?.purchase_order || '', warehouse: '', location: '', - lines: [ - { - line_number: 1, - // LineItem fields - part_number: undefined, - component_part_number: undefined, - class_id: undefined, - identifier: undefined, - unit_of_measure: undefined, - alternate_unit: undefined, - permit_number: undefined, - page_line: undefined, - has_certificate: false, - certificate_number: undefined, - tax_payment: false, - payment_method: undefined, - igi_amount: undefined, - is_military_mcia: false, - wildcard_field: undefined, - // Nested relations - financial: { - unit_cost_usd: undefined, - unit_cost_mxn: undefined, - unit_cost_capture: undefined, - unit_cost_commercial_usd: undefined, - value_usd: undefined, - value_mxn: undefined, - value_returned_usd: undefined, - value_returned_mxn: undefined, - customs_value_usd: undefined - }, - quantity: { - quantity: undefined, - unit_of_measure: undefined, - quantity_temp_export: undefined, - quantity_returned: undefined, - net_weight: undefined, - gross_weight: undefined, - package_id: undefined, - package_quantity: undefined, - package_description: undefined - }, - customs: { - fraction: undefined, - fraction_type: undefined, - american_fraction: undefined, - origin_country: undefined, - destination_country: undefined, - advalorem: undefined, - advalorem_american: undefined, - sector: undefined - }, - description: { - description_spanish: undefined, - description_english: undefined, - extra_description: undefined, - additional_info_spanish: undefined, - brand: undefined, - model: undefined, - has_serial: false, - eighth_rule_fraction: undefined, - eighth_rule_line: undefined, - consider_a31: false, - machinery_location: undefined - }, - reference: { - serie_id: undefined - } - } - ] + // Nested relations + financial: { + unit_cost_usd: undefined, + unit_cost_mxn: undefined, + unit_cost_capture: undefined, + unit_cost_commercial_usd: undefined, + value_usd: undefined, + value_mxn: undefined, + value_returned_usd: undefined, + value_returned_mxn: undefined, + customs_value_usd: undefined + }, + quantity: { + quantity: undefined, + unit_of_measure: undefined, + quantity_temp_export: undefined, + quantity_returned: undefined, + net_weight: undefined, + gross_weight: undefined, + package_id: undefined, + package_quantity: undefined, + package_description: undefined + }, + customs: { + fraction: undefined, + fraction_type: undefined, + american_fraction: undefined, + origin_country: undefined, + destination_country: undefined, + advalorem: undefined, + advalorem_american: undefined, + sector: undefined + }, + description: { + description_spanish: undefined, + description_english: undefined, + extra_description: undefined, + additional_info_spanish: undefined, + brand: undefined, + model: undefined, + has_serial: false, + eighth_rule_fraction: undefined, + eighth_rule_line: undefined, + consider_a31: false, + machinery_location: undefined + }, + reference: { + serie_id: undefined + } }; } @@ -376,14 +370,14 @@ function saveItemToPreset() { // Sanitizar datos para la plantilla - const cleanedItem = JSON.parse(JSON.stringify(editingItem)); + let cleanedItem = JSON.parse(JSON.stringify(editingItem)); - // Limpiar líneas para asegurar que son compatibles - if (cleanedItem.lines) { - cleanedItem.lines = cleanedItem.lines.map((line: any) => ({ - ...cleanLineData(line), + // Limpiar item para asegurar que es compatible + if (cleanedItem) { + cleanedItem = { + ...cleanLineData(cleanedItem), id: undefined // Las plantillas no deben tener IDs reales - })); + }; } if (editingBuilderIndex !== null) { @@ -409,35 +403,29 @@ function cloneItemForPreset(item: Item) { const { id, tenant_id, company_id, created_at, updated_at, temp_id, ...rest } = item as any; return { - ...rest, + ...sanitizeLineForPreset(rest), id: undefined, - invoice_id: undefined, - lines: (item.lines || []).map(sanitizeLineForPreset) + invoice_id: undefined }; } function buildManualItem(draft: any, index: number) { - return { + return cleanLineData({ id: undefined, temp_id: undefined, invoice_id: undefined, reference_number: draft.reference_number || undefined, - lines: [ - cleanLineData({ - line_number: index + 1, - description: { - description_spanish: draft.description || 'Sin descripción' - }, - quantity: { - quantity: Number(draft.quantity) || 0 - }, - financial: { - unit_cost_usd: - draft.unit_cost_usd !== null ? Number(draft.unit_cost_usd) || 0 : undefined - } - }) - ] - }; + line_number: index + 1, + description: { + description_spanish: draft.description || 'Sin descripción' + }, + quantity: { + quantity: Number(draft.quantity) || 0 + }, + financial: { + unit_cost_usd: draft.unit_cost_usd !== null ? Number(draft.unit_cost_usd) || 0 : undefined + } + }); } function handleAddManualItem() { @@ -466,15 +454,11 @@ } // Inject into active sheet if open + // No se pueden inyectar múltiples líneas en un item, ya que ahora un item ES una línea if (showItemSheet) { - const presetLines = selectedPreset.items.flatMap((item: any) => item.lines || []); - const cleanedNewLines = presetLines.map((line: any) => ({ - ...sanitizeLineForPreset(line), - id: undefined // Force new IDs - })); - - editingItem.lines = [...(editingItem.lines || []), ...cleanedNewLines]; - toast.success('Líneas inyectadas en la partida actual'); + toast.warning('No se puede inyectar plantilla en modo edición', { + description: 'Las plantillas solo se pueden aplicar directamente a la factura' + }); showUsePresetDialog = false; return; } @@ -517,13 +501,13 @@ isSavingPreset = true; try { - // We group everything as ONE Partida Template for injection - const lines = builderItems.flatMap((item: Item, idx: number) => { - return (item.lines || []).map((line: any) => ({ - ...cleanLineData(line), - line_number: line.line_number || idx + 1, // Ensure line_number is present + // We group everything as items for the template + const lines = builderItems.map((item: Item, idx: number) => { + return { + ...cleanLineData(item), + line_number: item.line_number || idx + 1, // Ensure line_number is present id: undefined // Ensure no IDs are saved in the preset - })); + }; }); const payloadItems = [ @@ -569,22 +553,20 @@ // Enrich item with descriptive data for display async function enrichItemData(item: Partial) { - if (!item.lines || item.lines.length === 0 || !activeCompanyId) return; - - const line = item.lines[0]; + if (!item || !activeCompanyId) return; // Load class data - if (line.class_id) { + if (item.class_id) { try { const response = await fetch( - `/api-sveltekit/classes/${line.class_id}?company_id=${activeCompanyId}`, + `/api-sveltekit/classes/${item.class_id}?company_id=${activeCompanyId}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); if (response.ok) { const classData = await response.json(); - (line as any).class_code = classData.class_code; - (line as any).class_unit_of_measure = classData.unit_of_measure; - (line as any).class_description = classData.description_es || classData.description_en; + (item as any).class_code = classData.class_code; + (item as any).class_unit_of_measure = classData.unit_of_measure; + (item as any).class_description = classData.description_es || classData.description_en; } } catch (error) { console.error('Error loading class data:', error); @@ -592,17 +574,17 @@ } // Load part number data - if (line.part_number) { + if (item.part_number_id) { try { const response = await fetch( - `/api-sveltekit/parts/${line.part_number}?company_id=${activeCompanyId}`, + `/api-sveltekit/parts/${item.part_number_id}?company_id=${activeCompanyId}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); if (response.ok) { const partData = await response.json(); - (line as any).part_number = partData.part_number; - (line as any).part_description_es = partData.description_spanish; - (line as any).part_description_en = partData.description_english; + (item as any).part_number_display = partData.part_number; + (item as any).part_description_es = partData.description_spanish; + (item as any).part_description_en = partData.description_english; } } catch (error) { console.error('Error loading part data:', error); @@ -610,16 +592,16 @@ } // Load unit of measure data - if (line.unit_of_measure) { + if (item.unit_of_measure) { try { - const response = await fetch(`/api-sveltekit/units-of-measure/${line.unit_of_measure}`, { + const response = await fetch(`/api-sveltekit/units-of-measure/${item.unit_of_measure}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } }); if (response.ok) { const unitData = await response.json(); - (line as any).unit_code = unitData.code; - (line as any).unit_description = unitData.description || unitData.description_en; + (item as any).unit_code = unitData.code; + (item as any).unit_description = unitData.description || unitData.description_en; } } catch (error) { console.error('Error loading unit data:', error); @@ -627,17 +609,17 @@ } // Load country data (if needed) - if (line.customs?.origin_country) { + if (item.customs?.origin_country) { try { const response = await fetch( - `/api-sveltekit/countries?search=${line.customs.origin_country}`, + `/api-sveltekit/countries?search=${item.customs.origin_country}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); if (response.ok) { const data = await response.json(); if (data.items && data.items.length > 0) { const country = data.items[0]; - (line.customs as any).origin_country_name = + (item.customs as any).origin_country_name = country.description || country.description_en; } } @@ -647,17 +629,17 @@ } // Load fraction data (if needed) - if (line.customs?.fraction) { + if (item.customs?.fraction) { try { const response = await fetch( - `/api-sveltekit/tariff-fractions?search=${line.customs.fraction}`, + `/api-sveltekit/tariff-fractions?search=${item.customs.fraction}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } } ); if (response.ok) { const data = await response.json(); if (data.items && data.items.length > 0) { const fraction = data.items[0]; - (line.customs as any).fraction_description = fraction.description; + (item.customs as any).fraction_description = fraction.description; } } } catch (error) { @@ -666,8 +648,8 @@ } // Load package data (if needed) - const packageId = line.quantity?.package_id; - if (packageId && line.quantity) { + const packageId = item.quantity?.package_id; + if (packageId && item.quantity) { try { const response = await fetch('/api-sveltekit/packages', { method: 'GET', @@ -679,9 +661,10 @@ if (Array.isArray(packages)) { const pkg = packages.find((p: any) => p.id === packageId); if (pkg) { - (line.quantity as any).package_description = pkg.description_es || pkg.description_en || pkg.key; - (line.quantity as any).package_key = pkg.key; - (line.quantity as any).package_weight_unit = pkg.weight_unit || 0; + (item.quantity as any).package_description = + pkg.description_es || pkg.description_en || pkg.key; + (item.quantity as any).package_key = pkg.key; + (item.quantity as any).package_weight_unit = pkg.weight_unit || 0; } } } @@ -691,7 +674,7 @@ } // Load payment method description (if needed) - if (line.payment_method) { + if (item.payment_method) { try { const response = await fetch('/api-sveltekit/payment-methods', { method: 'GET', @@ -701,9 +684,9 @@ const data = await response.json(); const methods = data.items || data.data || data; if (Array.isArray(methods)) { - const method = methods.find((m: any) => m.key === line.payment_method); + const method = methods.find((m: any) => m.key === item.payment_method); if (method) { - (line as any).payment_method_description = method.description; + (item as any).payment_method_description = method.description; } } } @@ -715,58 +698,56 @@ // Normalize numeric values from strings to numbers function normalizeItemData(item: Partial): Partial { - if (item.lines && item.lines.length > 0) { - item.lines = item.lines.map((line) => { - const normalizedLine = { ...line }; + if (item) { + const normalizedItem = { ...item }; - // Normalize financials - if (normalizedLine.financial) { - normalizedLine.financial = { - ...normalizedLine.financial, - unit_cost_usd: - normalizedLine.financial.unit_cost_usd != null - ? Number(normalizedLine.financial.unit_cost_usd) - : undefined, - unit_cost_mxn: - normalizedLine.financial.unit_cost_mxn != null - ? Number(normalizedLine.financial.unit_cost_mxn) - : undefined, - value_usd: - normalizedLine.financial.value_usd != null - ? Number(normalizedLine.financial.value_usd) - : undefined, - value_mxn: - normalizedLine.financial.value_mxn != null - ? Number(normalizedLine.financial.value_mxn) - : undefined - }; - } + // Normalize financials + if (normalizedItem.financial) { + normalizedItem.financial = { + ...normalizedItem.financial, + unit_cost_usd: + normalizedItem.financial.unit_cost_usd != null + ? Number(normalizedItem.financial.unit_cost_usd) + : undefined, + unit_cost_mxn: + normalizedItem.financial.unit_cost_mxn != null + ? Number(normalizedItem.financial.unit_cost_mxn) + : undefined, + value_usd: + normalizedItem.financial.value_usd != null + ? Number(normalizedItem.financial.value_usd) + : undefined, + value_mxn: + normalizedItem.financial.value_mxn != null + ? Number(normalizedItem.financial.value_mxn) + : undefined + }; + } - // Normalize quantities - if (normalizedLine.quantity) { - normalizedLine.quantity = { - ...normalizedLine.quantity, - quantity: - normalizedLine.quantity.quantity != null - ? Number(normalizedLine.quantity.quantity) - : undefined, - net_weight: - normalizedLine.quantity.net_weight != null - ? Number(normalizedLine.quantity.net_weight) - : undefined, - gross_weight: - normalizedLine.quantity.gross_weight != null - ? Number(normalizedLine.quantity.gross_weight) - : undefined, - package_quantity: - normalizedLine.quantity.package_quantity != null - ? Number(normalizedLine.quantity.package_quantity) - : undefined - }; - } + // Normalize quantities + if (normalizedItem.quantity) { + normalizedItem.quantity = { + ...normalizedItem.quantity, + quantity: + normalizedItem.quantity.quantity != null + ? Number(normalizedItem.quantity.quantity) + : undefined, + net_weight: + normalizedItem.quantity.net_weight != null + ? Number(normalizedItem.quantity.net_weight) + : undefined, + gross_weight: + normalizedItem.quantity.gross_weight != null + ? Number(normalizedItem.quantity.gross_weight) + : undefined, + package_quantity: + normalizedItem.quantity.package_quantity != null + ? Number(normalizedItem.quantity.package_quantity) + : undefined + }; + } - return normalizedLine; - }); + return normalizedItem; } return item; @@ -782,16 +763,12 @@ isSaving = true; try { - // Clean lines data before sending - const cleanedLines = (editingItem.lines || []).map(cleanLineData); + // Clean item data before sending + const cleanedItem = cleanLineData(editingItem); const response = await itemsApi.create(activeCompanyId, { - invoice_id: invoice.id, - reference_number: editingItem.reference_number, - order: editingItem.order, - warehouse: editingItem.warehouse, - location: editingItem.location, - lines: cleanedLines + ...cleanedItem, + invoice_id: invoice.id }); // Verificar si hay errores de validación @@ -851,16 +828,10 @@ isSaving = true; try { - // Clean lines data before sending - const cleanedLines = (editingItem.lines || []).map(cleanLineData); + // Clean item data before sending + const cleanedItem = cleanLineData(editingItem); - const response = await itemsApi.update(selectedItem.id, activeCompanyId, { - reference_number: editingItem.reference_number, - order: editingItem.order, - warehouse: editingItem.warehouse, - location: editingItem.location, - lines: cleanedLines - }); + const response = await itemsApi.update(selectedItem.id, activeCompanyId, cleanedItem); // Verificar si hay errores de validación if ('error' in response) { @@ -916,52 +887,51 @@ function saveItem() { // Validar campos obligatorios antes de guardar - const line = editingItem.lines?.[0]; const missingFields: string[] = []; - if (!line) { + if (!editingItem) { toast.warning('Error de datos', { - description: 'No se encontró información de la línea del item' + description: 'No se encontró información del item' }); return; } // 1. Clase - if (!line.class_id) { + if (!editingItem.class_id) { missingFields.push('Clase'); } // 2. Cantidad - if (!line.quantity?.quantity || line.quantity.quantity <= 0) { + if (!editingItem.quantity?.quantity || editingItem.quantity.quantity <= 0) { missingFields.push('Cantidad'); } // 3. Unidad de Medida - if (!line.unit_of_measure) { + if (!editingItem.unit_of_measure) { missingFields.push('U.M. (Unidad de Medida)'); } // 4. Costo Unitario (al menos uno debe estar presente) const hasCost = - line.financial?.unit_cost_usd || - line.financial?.unit_cost_mxn || - line.financial?.unit_cost_capture; + editingItem.financial?.unit_cost_usd || + editingItem.financial?.unit_cost_mxn || + editingItem.financial?.unit_cost_capture; if (!hasCost) { missingFields.push('Costo Unitario (USD, MXN o Captura)'); } // 5. País de Origen - if (!line.customs?.origin_country) { + if (!editingItem.customs?.origin_country) { missingFields.push('País de Origen'); } // 6. Tipo de Tarifa - if (!line.customs?.fraction_type) { + if (!editingItem.customs?.fraction_type) { missingFields.push('Tipo de Tarifa'); } // 7. Descripción en Español - if (!line.description?.description_spanish?.trim()) { + if (!editingItem.description?.description_spanish?.trim()) { missingFields.push('Descripción en Español'); } @@ -1021,15 +991,15 @@
-
-
+
+

Items de la Factura

Carga partidas, crea o aplica plantillas sin salir de esta vista.

-
+
@@ -1068,7 +1038,7 @@ Preferencia Contiene Subpartida Partida Principal - Acciones + Acciones @@ -1097,7 +1067,7 @@ {item.is_subitem ? 'S' : 'P'} {item.quantity?.quantity || '0'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'} {item.is_subitem ? 'S' : 'P'} {item.quantity?.quantity || '0'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'} {item.fa_data?.search_line || '-'} {item.is_subitem ? 'S' : 'P'} {item.class_code || '-'} - {item.part_number || '-'} + {item.part_number_display || '-'}
@@ -1280,10 +1250,10 @@ }} > -
+
Usar plantilla @@ -1298,7 +1268,7 @@ disabled={isLoadingPresets} class="h-8 text-muted-foreground" > - + Actualizar
-
+
-
+
@@ -1334,47 +1304,47 @@
{#if isLoadingPresets}
- + Cargando...
{:else if filteredPresets.length === 0}
- +

No se encontraron plantillas

{:else} {#each filteredPresets as preset} @@ -1527,7 +1495,11 @@
- +
@@ -1541,18 +1513,18 @@
-
+
{builderItems.length} items/líneas
-
-
- +
+ Items de la plantilla
@@ -1562,7 +1534,7 @@ # Descripción Cant. - Acciones + Acciones @@ -1570,7 +1542,7 @@ Usa el botón "Agregar Item/Línea" para definir el contenido de la plantilla. @@ -1583,8 +1555,8 @@
- - {item.lines?.[0]?.description?.description_spanish || 'Sin descripción'} + + {item?.[0]?.description?.description_spanish || 'Sin descripción'} Ref: {item.reference_number || '-'} - {item.lines?.[0]?.quantity?.quantity || 0} + {item?.[0]?.quantity?.quantity || 0} - +
@@ -1628,14 +1600,14 @@ diff --git a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte index b53cc53f..8f80a09a 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/invoices/edit/others-tab-form.svelte @@ -47,6 +47,8 @@ adendas: invoice.compliance_mx?.addendum_vu || '', observations_vu: invoice.vu_observations || '', certified_number: invoice.compliance_mx?.certificate_number || '', + entry_exit_date: invoice.logistics?.entry_exit_date || '', + payment_date: invoice.logistics?.payment_date || '', // New Export fields bill_number: invoice.logistics?.bill_number || '', guide_number: invoice.logistics?.guide_number || '', @@ -80,6 +82,8 @@ adendas: '', observations_vu: '', certified_number: '', + entry_exit_date: '', + payment_date: '', // New Export fields bill_number: '', guide_number: '', @@ -145,8 +149,8 @@
- (formData.is_mixed = v === 'true')} class="flex gap-4" > @@ -297,7 +301,6 @@
-
@@ -317,6 +320,16 @@
+ +
+ + +
+
+ + +
+
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts b/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts index aa8070a8..141a1fbd 100644 --- a/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts +++ b/frontend/src/lib/components/dashboard/invoices/edit/save-invoice.ts @@ -114,6 +114,7 @@ function buildInvoicePayload(formData: FormDataSet): CreateInvoiceData | UpdateI invoice_type: InvoiceTopFieldsFormData?.invoice_type || undefined, document_type: generalFormData?.document_type || undefined, invoice_number: InvoiceTopFieldsFormData?.invoice_number || undefined, + purchase_order: InvoiceTopFieldsFormData?.purchase_order || continuationFormData?.purchase_order || undefined, invoice_date: InvoiceTopFieldsFormData?.invoice_date || undefined, emission_date: InvoiceTopFieldsFormData?.emission_date || undefined, proforma_number: observationFormData?.proforma_number || undefined, @@ -126,7 +127,7 @@ function buildInvoicePayload(formData: FormDataSet): CreateInvoiceData | UpdateI vu_observations: othersFormData?.observations_vu || undefined, comments_status: othersFormData?.comments_status || undefined, option_iv18: othersFormData?.option_iv18 || undefined, - purchase_order: continuationFormData?.purchase_order || undefined, + payment_terms: continuationFormData?.payment_terms || undefined, handling_fees: continuationFormData?.handling_fees || undefined, cfdi_uuid: continuationFormData?.cfdi_uuid || undefined, @@ -234,8 +235,9 @@ function buildComplianceMxData(invoiceType: string, InvoiceTopFieldsFormData: an function buildFinancialsData(generalFormData: any, observationFormData: any, othersFormData: any, InvoiceTopFieldsFormData?: any) { return { // Currency from generalFormData - currency_type: generalFormData?.currency_type || null, + currency_type: generalFormData?.currency_type || (generalFormData?.currency === 'foreign' ? 'USD' : null), currency: generalFormData?.currency || null, + exchange_rate: generalFormData?.exchange_rate ? Number(generalFormData.exchange_rate) : null, iva_factor: (InvoiceTopFieldsFormData?.iva_factor || generalFormData?.iva_factor) ? String(InvoiceTopFieldsFormData?.iva_factor || generalFormData.iva_factor) : null, // Costs & increments from observationFormData freight: observationFormData?.freight || null, @@ -255,9 +257,11 @@ function buildLogisticsData(generalFormData: any, observationFormData: any, othe // Retornar logistics como objeto único con datos de continuación return { carrier_id: generalFormData?.carrier_id || null, + transport_id: generalFormData?.transport_id || null, transport_type: generalFormData?.transport_type || 'none', driver_name: generalFormData?.driver_name || null, - vehicle_num: generalFormData?.transport_num || continuationFormData?.numero_tipo_transporte || null, + license_plate: generalFormData?.transport_num || null, + vehicle_num: continuationFormData?.numero_tipo_transporte || null, incoterm: observationFormData?.incoterm || null, // Campos de continuación mapeados a logistics transport_num: continuationFormData?.numero_tipo_transporte || null, @@ -285,6 +289,10 @@ function buildLogisticsData(generalFormData: any, observationFormData: any, othe green_light_us: continuationFormData?.semaforo_verde_aduana_americana || false, red_light_mx: continuationFormData?.semaforo_rojo_aduana_mexicana || false, red_light_us: continuationFormData?.semaforo_rojo_aduana_americana || false, + // Fechas Logísticas de OthersTabForm (se pasan en othersFormData) + entry_exit_date: othersFormData?.entry_exit_date || null, + payment_date: othersFormData?.payment_date || null, + vehicle_data: continuationFormData?.vehicle_data || null, }; } diff --git a/frontend/src/lib/components/dashboard/invoices/pdf-progress-dialog.svelte b/frontend/src/lib/components/dashboard/invoices/pdf-progress-dialog.svelte index f94a58f3..813c1f66 100644 --- a/frontend/src/lib/components/dashboard/invoices/pdf-progress-dialog.svelte +++ b/frontend/src/lib/components/dashboard/invoices/pdf-progress-dialog.svelte @@ -1,130 +1,132 @@ - - - - Generando PDF - - Por favor espere mientras se genera su documento. - - + + + + {title} + Por favor espere mientras se genera su documento. + -
-
- {statusMessage} - {progress}% -
- - +
+
+ {statusMessage} + {progress}% +
-
- {#if isComplete} -
- - Listo para descargar -
- {:else if hasError} -
- - Ocurrió un error -
- {:else} -
- -
- {/if} -
-
+ - - {#if hasError} - - {/if} - - +
+ {#if isComplete} +
+ + Listo para descargar +
+ {:else if hasError} +
+ + Ocurrió un error +
+ {:else} +
+ +
+ {/if} +
+
+ + + {#if hasError} + + {/if} + +
diff --git a/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte b/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte new file mode 100644 index 00000000..39e52576 --- /dev/null +++ b/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte @@ -0,0 +1,679 @@ + + + + + + Interfase Broker Americano + + Configura la transferencia electrónica para la factura {invoice?.invoice_number || ''} + + + +
+ +
+
+ + + {interfaceType} + + {#each interfaceOptions as opt} + + {/each} + + +
+
+ + + {movementType} + + {#each movementOptions as opt} + + {/each} + + +
+ {#if movementType === 'Importacion'} +
+ + + {regimen} + + + + + + + +
+ {/if} +
+ + + + + +
+ +
+ {#if movementType === 'Exportacion'} +
+ +
+ +
+ {#each manifests as m, i} +
openManifestSelector(i)} + onkeydown={(e) => + (e.key === 'Enter' || e.key === ' ') && openManifestSelector(i)} + > + {i + 1} +
+ {m} +
+ +
+ {/each} + + +
openManifestSelector(-1)} + onkeydown={(e) => + (e.key === 'Enter' || e.key === ' ') && openManifestSelector(-1)} + > + + Agregar... +
+
+ {/if} + +
+ {#if movementType === 'Importacion'} +
FACTURAS ({regimen?.toUpperCase()})
+
+ {#each manualInvoices as m, i} +
openInvoiceSelector(i)} + onkeydown={(e) => + (e.key === 'Enter' || e.key === ' ') && openInvoiceSelector(i)} + > + {i + 1} +
+ {m} +
+ +
+ {/each} + + +
openInvoiceSelector(-1)} + onkeydown={(e) => + (e.key === 'Enter' || e.key === ' ') && openInvoiceSelector(-1)} + > + + Agregar... +
+
+ {/if} +
+ + + {#if movementType === 'Importacion'} +
+
+ +
+ +
+ {#if entryPort} + + {/if} + +
+
+
+
+ +
+ +
+ {#if exitPort} + + {/if} + +
+
+
+
+ {/if} +
+
+ + +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + + +
+ +

Configuración de respaldos (Pendiente)

+
+
+ + + +
+ +

Configuración general (Pendiente)

+
+
+ + + + + Movimiento + + + Respaldos + + + Configuración + + +
+
+ + + + + +
+ + + + + + {#if taskId} + (isProgressOpen = false)} + /> + {/if} + + (entryPort = item.port_code)} + /> + + (exitPort = item.port_code)} + /> +
diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte index a7a749f6..1682fadb 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte @@ -83,6 +83,22 @@ actualizar_ieps_rect: boolean; calcular_recargos_diferencias: boolean; + // Rectificación (R1) + es_rectificacion: string; + pedimento_original: string; + clave_pedimento_original: string; + fecha_pago_original: string; + anio_impresion_rect: string; + aduana_seccion_original: string; + patente_original: string; + utilizar_fecha_pago_original: boolean; + calculo_manual_contribuciones: boolean; + causa: string; + motivo: string; + + // Diferencias en contribuciones + liquidacion_diferencias: { gravamen: string; forma_pago: string; importe: string }[]; + // Parámetro de cambio de DTA proveedor_nacional_modifico_dta: boolean; @@ -133,6 +149,18 @@ actualizar_cc_rect: false, actualizar_ieps_rect: false, calcular_recargos_diferencias: false, + es_rectificacion: '', + pedimento_original: '', + clave_pedimento_original: '', + fecha_pago_original: '', + anio_impresion_rect: '', + aduana_seccion_original: '', + patente_original: '', + utilizar_fecha_pago_original: false, + calculo_manual_contribuciones: false, + causa: '', + motivo: '', + liquidacion_diferencias: [], proveedor_nacional_modifico_dta: false, calculo_valor_aduana_v2: false, calculo_2_decimales_valor_unitario: false, @@ -275,20 +303,6 @@ // Estados para vista de Rectificación let showRectificacion = $state(false); - let rectificacionFormData = $state({ - es_rectificacion: '', - pedimento_original: '00-0000:0000000', - clave_pedimento_original: '', - fecha_pago_original: '', - anio_impresion_rect: '', - aduana_seccion_original: '', - patente_original: '', - utilizar_fecha_pago_original: false, - calculo_manual_contribuciones: false - }); - let liquidacionDiferencias = $state<{ gravamen: string; forma_pago: string; importe: string }[]>( - [] - ); // Estados para diálogo de diferencias en contribuciones let isDiferenciasDialogOpen = $state(false); @@ -308,10 +322,6 @@ // Estados para vista de Rectificación II let showRectificacionII = $state(false); - let rectificacionIIFormData = $state({ - causa: '', - motivo: '' - }); // Estados para vista de Notas let showNotas = $state(false); @@ -576,9 +586,9 @@ }; if (editingDiferenciaIndex !== null) { - liquidacionDiferencias[editingDiferenciaIndex] = newItem; + formData.liquidacion_diferencias[editingDiferenciaIndex] = newItem; } else { - liquidacionDiferencias.push(newItem); + formData.liquidacion_diferencias = [...formData.liquidacion_diferencias, newItem]; } isDiferenciasDialogOpen = false; } @@ -737,7 +747,7 @@ } -
+
{#if !showBitacora && !showPartesII && !showRectificacion && !showRectificacionII && !showNotas && !showSeleccionAutomatizada && !showMultas} @@ -748,7 +758,7 @@ -
+

Parámetros de cálculo:

@@ -792,49 +802,49 @@ id="dta_operacion" bind:checked={formData.dta_por_operacion_ag_facturas} /> -
-
- +
-
-
+
-
-
-
@@ -844,7 +854,7 @@ id="cuota_fija_veh" bind:checked={formData.cuota_fija_adicional_vehiculo} /> -
@@ -870,7 +880,7 @@
-
@@ -888,7 +898,7 @@
-
@@ -909,7 +919,7 @@
-
+

@@ -918,35 +928,35 @@
-
-
-
-
-
@@ -959,35 +969,35 @@
-
-
-
-
-
@@ -997,7 +1007,7 @@ id="calc_recargos" bind:checked={formData.calcular_recargos_diferencias} /> -
@@ -1006,7 +1016,7 @@
-
+

Parámetro de cambio de DTA:

@@ -1015,15 +1025,15 @@ id="prov_nacional" bind:checked={formData.proveedor_nacional_modifico_dta} /> -
-
+
-
@@ -1033,7 +1043,7 @@ id="calc_2dec" bind:checked={formData.calculo_2_decimales_valor_unitario} /> -
@@ -1043,7 +1053,7 @@ id="calc_base_part" bind:checked={formData.calcular_valor_aduana_base_partidas} /> -
@@ -1058,42 +1068,42 @@
-
-
-
-
- +
-
+
@@ -1126,7 +1136,7 @@ Registro de movimientos sobre el Pedimento -
+
@@ -1141,13 +1151,13 @@ {#if bitacoraMovimientos.length === 0} - + No hay movimientos registrados {:else if paginatedBitacoraMovimientos.length === 0} - + No hay datos en esta página @@ -1175,7 +1185,7 @@ variant="outline" onclick={goToBitacoraFirstPage} disabled={currentBitacoraPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1184,11 +1194,11 @@ variant="outline" onclick={goToBitacoraPreviousPage} disabled={currentBitacoraPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > - + Página {currentBitacoraPage + 1} de {totalBitacoraPages || 1} @@ -1205,7 +1215,7 @@ variant="outline" onclick={goToBitacoraLastPage} disabled={currentBitacoraPage >= totalBitacoraPages - 1} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1223,14 +1233,14 @@ {:else if showPartesII} -
+
Embarques Parciales -
+
@@ -1249,13 +1259,13 @@ {#if embarquesParciales.length === 0} - + No hay embarques registrados {:else if paginatedEmbarquesParciales.length === 0} - + No hay datos en esta página @@ -1297,7 +1307,7 @@ variant="outline" onclick={goToPartesIIFirstPage} disabled={currentPartesIIPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1306,11 +1316,11 @@ variant="outline" onclick={goToPartesIIPreviousPage} disabled={currentPartesIIPage === 0} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > - + Página {currentPartesIIPage + 1} de {totalPartesIIPages || 1} @@ -1327,7 +1337,7 @@ variant="outline" onclick={goToPartesIILastPage} disabled={currentPartesIIPage >= totalPartesIIPages - 1} - class="w-8 h-8 p-0" + class="h-8 w-8 p-0" > @@ -1374,42 +1384,42 @@ -
+
- +
-
+
- +

Partidas del Pedimento

-
+
- +
-
+
- +

Embarques

-
+
- +
-
+
- +
-
+
- +
@@ -1455,21 +1465,21 @@ Rectificación -
+
{ - if (v) rectificacionFormData.es_rectificacion = v; + if (v) formData.es_rectificacion = v; }} > - {rectificacionFormData.es_rectificacion === 'si' + {formData.es_rectificacion === 'si' ? 'Sí' - : rectificacionFormData.es_rectificacion === 'no' + : formData.es_rectificacion === 'no' ? 'No' : 'Seleccionar'} @@ -1485,7 +1495,8 @@
@@ -1496,7 +1507,8 @@ >
@@ -1505,7 +1517,7 @@
@@ -1513,7 +1525,8 @@
@@ -1521,13 +1534,14 @@
- +
@@ -1535,10 +1549,9 @@
{ - rectificacionFormData.utilizar_fecha_pago_original = - !rectificacionFormData.utilizar_fecha_pago_original; + formData.utilizar_fecha_pago_original = !formData.utilizar_fecha_pago_original; }} />
-
-
+
+

Cuadro de liquidación para diferencias en contribuciones

{ - rectificacionFormData.calculo_manual_contribuciones = - !rectificacionFormData.calculo_manual_contribuciones; + formData.calculo_manual_contribuciones = + !formData.calculo_manual_contribuciones; }} />
-
+
@@ -1580,14 +1593,14 @@ - {#if liquidacionDiferencias.length === 0} + {#if formData.liquidacion_diferencias.length === 0} No hay registros {:else} - {#each liquidacionDiferencias as item} + {#each formData.liquidacion_diferencias as item} {item.gravamen} {item.forma_pago} @@ -1631,8 +1644,8 @@ @@ -1641,8 +1654,8 @@ @@ -1659,7 +1672,7 @@ -
+
@@ -1668,16 +1681,16 @@ Comentario - + Fecha Hora - + {#if notasPedimento.length === 0} - + No hay notas registradas @@ -1696,7 +1709,7 @@ -
+
- + Página {currentNotasPage + 1} de {totalNotasPages || 1}
@@ -1829,7 +1842,7 @@
@@ -1873,7 +1886,7 @@
- +
-
+
# Descripción de Mercancía - Cantidad UMC - Cantidad UMT - Peso + Cantidad UMC + Cantidad UMT + Peso {#if mercancias.length === 0} - + No hay mercancías registradas @@ -2086,17 +2099,17 @@ -
- - - -
@@ -2109,7 +2122,7 @@ type="number" bind:value={currentEmbarque.cantidad_transportes} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2119,7 +2132,7 @@ type="number" bind:value={currentEmbarque.cantidad_partidas} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2130,7 +2143,7 @@ step="0.001" value={currentEmbarque.suma_cantidad_umc.toFixed(3)} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2140,7 +2153,7 @@ type="number" bind:value={currentEmbarque.cantidad_embarques} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2150,7 +2163,7 @@ type="number" bind:value={currentEmbarque.cantidad_mercancias} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> @@ -2161,13 +2174,13 @@ step="0.001" value={currentEmbarque.suma_cantidad_umc_embarques.toFixed(3)} readonly - class="text-right h-9 text-sm" + class="h-9 text-right text-sm" /> -
+
@@ -2190,7 +2203,7 @@ - + Mercancías del Embarque Parcial @@ -2201,7 +2214,7 @@
@@ -2311,7 +2324,7 @@
diff --git a/frontend/src/lib/components/keyboard/KeyboardManager.svelte b/frontend/src/lib/components/keyboard/KeyboardManager.svelte index cd7288cb..35f52052 100644 --- a/frontend/src/lib/components/keyboard/KeyboardManager.svelte +++ b/frontend/src/lib/components/keyboard/KeyboardManager.svelte @@ -117,6 +117,7 @@ const authenticated = isAuthenticated(); const { key, altKey, ctrlKey, metaKey, shiftKey } = event; + if (!key) return; const lowerKey = key.toLowerCase(); // Ignore standalone modifiers diff --git a/frontend/src/lib/components/sidebar/modules.ts b/frontend/src/lib/components/sidebar/modules.ts index 264c7683..5e7fe6ae 100644 --- a/frontend/src/lib/components/sidebar/modules.ts +++ b/frontend/src/lib/components/sidebar/modules.ts @@ -5,6 +5,7 @@ import { BadgeCheck, ChartPie, Database, + FileSearch, FileText, Frame, GalleryVerticalEnd, @@ -13,8 +14,8 @@ import { Package, Settings2, Shield, - Users, Ship, + Users, } from 'lucide-svelte'; import * as m from "$lib/paraglide/messages.js"; import { Title } from '../ui/alert'; @@ -304,31 +305,31 @@ export function getSidebarData(): SidebarData { items: [ { title: m["sidebar.fractions.sitar"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/sitar", }, { title: m["sidebar.fractions.sitar_seventh_amendment"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/seventh-amendment", }, { title: m["sidebar.fractions.sitar_us"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/us", }, { title: m["sidebar.fractions.american"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/american", }, { title: m["sidebar.fractions.canadian"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/canadian", }, { title: m["sidebar.fractions.historical"](), - url: "#", + url: "/dashboard/general_catalogs/tariff-fractions/historical", }, { title: m["sidebar.fractions.sectors"](), - url: "#", + url: "/dashboard/general_catalogs/sectors", }, ], }, @@ -459,6 +460,7 @@ export function getSidebarData(): SidebarData { }, ], }, + { title: m["sidebar.clients_and_providers"](), url: "/dashboard/clients_and_providers", @@ -471,6 +473,17 @@ export function getSidebarData(): SidebarData { icon: BadgeCheck, items: [], }, + { + title: "Reportes", + url: "#", + icon: FileSearch, + items: [ + { + title: "Facturas Impo/Expo", + url: "/dashboard/reports/invoices", + }, + ], + }, { title: m["sidebar.reference_data.configuracion"](), url: "#", diff --git a/frontend/src/lib/components/sidebar/nav-projects.svelte b/frontend/src/lib/components/sidebar/nav-projects.svelte index e231955d..f67a27e2 100644 --- a/frontend/src/lib/components/sidebar/nav-projects.svelte +++ b/frontend/src/lib/components/sidebar/nav-projects.svelte @@ -1,4 +1,5 @@ - @@ -66,11 +78,28 @@ {/each} + - + More + + + + + + + + Carga CSV + + + + diff --git a/frontend/src/lib/components/ui/icons/FolderIcon.svelte b/frontend/src/lib/components/ui/icons/FolderIcon.svelte new file mode 100644 index 00000000..beada7c8 --- /dev/null +++ b/frontend/src/lib/components/ui/icons/FolderIcon.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/frontend/src/lib/components/ui/select/select-root.svelte b/frontend/src/lib/components/ui/select/select-root.svelte index e6b706ed..40f3b2dc 100644 --- a/frontend/src/lib/components/ui/select/select-root.svelte +++ b/frontend/src/lib/components/ui/select/select-root.svelte @@ -1,14 +1,18 @@ - + {@render children?.()} diff --git a/frontend/src/lib/config/csv-upload.ts b/frontend/src/lib/config/csv-upload.ts new file mode 100644 index 00000000..656b0459 --- /dev/null +++ b/frontend/src/lib/config/csv-upload.ts @@ -0,0 +1,366 @@ +import { + User, + Users, + FileText, + Truck, + Container, + Ship, + Plane, + Package, + Briefcase, + Globe, + CreditCard, + DollarSign, + Calendar, + Hash, + MapPin, + ShieldCheck, + FileDigit, + Scale, +} from 'lucide-svelte'; + +// --- Interfaces --- + +export interface CsvUploadItem { + id: string; + title: string; + icon: any; + group?: string; // For grouping within a tab + modelTarget?: string; // The backend model this maps to + description?: string; + templateUrl?: string; // Path to the template file in static/ + disabled?: boolean; // New property to mark items as "Coming Soon" +} + +export interface CsvUploadField { + name: string; + label: string; + type: 'text' | 'select' | 'boolean' | 'date' | 'radio'; + options?: { label: string; value: string | boolean | number }[]; + required?: boolean; + defaultValue?: any; +} + +// Map of Tab ID -> Array of Fields +export const tabSettings: Record = { + catalogos: [ + { + name: 'mode', + label: 'Modo de Carga', + type: 'radio', + options: [ + { label: 'Actualizar', value: 'update' }, + { label: 'Reemplazar', value: 'replace' } + ], + defaultValue: 'update' + } + ], + transportes: [ + { + name: 'mode', + label: 'Modo de Carga', + type: 'radio', + options: [ + { label: 'Actualizar', value: 'update' }, + { label: 'Reemplazar', value: 'replace' } + ], + defaultValue: 'update' + } + ], + importacion: [ + { + name: 'autonumber_remesas', + label: 'Autonumerar Remesas', + type: 'boolean', + defaultValue: false + }, + { + name: 'recalculate_dates', + label: 'Recalcular Fechas', + type: 'boolean', + defaultValue: false + }, + { + name: 'dateFormat', + label: 'Formato de Fecha', + type: 'select', + options: [ + { label: 'DD/MM/YYYY', value: 'dd/mm/yyyy' }, + { label: 'MM/DD/YYYY', value: 'mm/dd/yyyy' }, + { label: 'YYYY-MM-DD', value: 'yyyy-mm-dd' } + ], + defaultValue: 'dd/mm/yyyy' + } + ], + exportacion: [ + { + name: 'invoice_type', + label: 'Tipo de Factura', + type: 'select', + options: [ + { label: 'AFIJO', value: 'AFIJO' }, + { label: 'NORMAL', value: 'NORMAL' }, + ], + defaultValue: 'AFIJO', + }, + { + name: 'is_regime_change', + label: 'Es Cambio de Régimen', + type: 'boolean', + defaultValue: false, + }, + { + name: 'dateFormat', + label: 'Formato de Fecha', + type: 'select', + options: [ + { label: 'DD/MM/YYYY', value: 'dd/mm/yyyy' }, + { label: 'MM/DD/YYYY', value: 'mm/dd/yyyy' }, + { label: 'YYYY-MM-DD', value: 'yyyy-mm-dd' } + ], + defaultValue: 'dd/mm/yyyy' + } + ] +}; + +// --- DATA DEFINITIONS (Items only, no config) --- + +export const catalogosConfig: CsvUploadItem[] = [ + { + id: 'customs_brokers', + title: 'Agentes Aduanales', + icon: User, + modelTarget: 'CustomsBroker', + templateUrl: '/csv/EstructuraCatAgenteAduanal.xls' + }, + { + id: 'clients_providers', + title: 'Clientes y Proveedores', + icon: Users, + modelTarget: 'ClientProvider', + templateUrl: '/csv/EstructuraCatClienteProv.xls' + }, + { + id: 'exchange_rates', + title: 'Tipo de Cambios', + icon: DollarSign, + modelTarget: 'ExchangeRate', + templateUrl: '/csv/EstructuraCatTiposCambio.xls' + }, + { + id: 'american_fractions', + title: 'Fracc. Ame.', + icon: Globe, + modelTarget: 'AmericanFraction', + templateUrl: '/csv/EstructuraCatFraccAme.xls' + }, + { + id: 'material_classes', + title: 'Clases de Materiales', + icon: Package, + modelTarget: 'MaterialClass', + templateUrl: '/csv/EstructuraCatClasesAF.xls' + }, + { + id: 'items', + title: 'Partidas (Permisos)', + icon: FileText, + group: 'Permisos', + modelTarget: 'ItemPermission', + templateUrl: '/csv/EstructuraCatPartesAF.xls' + }, + { + id: 'headers', + title: 'Encabezados (Permisos)', + icon: FileText, + group: 'Permisos', + modelTarget: 'HeaderPermission', + disabled: true, + }, + { + id: 'historical_fractions', + title: 'Fracciones Históricas', + icon: Calendar, + modelTarget: 'HistoricalFraction', + disabled: true, + }, + { + id: 'pedimentos', + title: 'Pedimentos', + icon: FileDigit, + modelTarget: 'Pedimento', + templateUrl: '/csv/EstructuraCatPedimentos.xls' + }, +]; + +export const transportesConfig: CsvUploadItem[] = [ + { + id: 'transports', + title: 'Transportes', + icon: Truck, + modelTarget: 'Transport', + templateUrl: '/csv/EstructuraCatTransportes.xls' + }, + { + id: 'drivers', + title: 'Conductores', + icon: User, + modelTarget: 'Driver', + templateUrl: '/csv/EstructuraCatConductor.xls' + }, + { + id: 'trailers', + title: 'Trailers y Cajas', + icon: Container, + modelTarget: 'Trailer', + templateUrl: '/csv/EstructuraCatTrailers.xls' + }, +]; + +export const importacionConfig: CsvUploadItem[] = [ + // Impo Temp + { + id: 'imp_temp_header', + title: 'Encabezado', + icon: FileText, + group: 'Impo. Temp.', + modelTarget: 'invoice_header', + templateUrl: '/csv/EstructuraEncFacImpoTemp.xls' + }, + { + id: 'imp_temp_details', + title: 'Partidas', + icon: Package, + group: 'Impo. Temp.', + modelTarget: 'invoice_details', + templateUrl: '/csv/EstructuraParFacImpoTempAF.xls' + }, + { + id: 'imp_temp_series', + title: 'Series', + icon: Hash, + group: 'Impo. Temp.', + modelTarget: 'InvoiceSeries', + disabled: true, + }, + // Impo Def + { + id: 'imp_def_header', + title: 'Encabezado', + icon: FileText, + group: 'Impo. Def.', + modelTarget: 'InvoiceHeader', + templateUrl: '/csv/EstructuraEncFacImpoDef.xls' + }, + { + id: 'imp_def_details', + title: 'Partidas', + icon: Package, + group: 'Impo. Def.', + modelTarget: 'InvoiceSalesDetails', + templateUrl: '/csv/EstructuraParFacImpoDefAF.xls' + }, + { + id: 'imp_def_series', + title: 'Series', + icon: Hash, + group: 'Impo. Def.', + modelTarget: 'InvoiceSeries', + disabled: true, + }, + // Compras Mex + { + id: 'comp_mex_header', + title: 'Encabezado', + icon: FileText, + group: 'Compras Mex.', + modelTarget: 'InvoiceHeader', + disabled: true, + }, + { + id: 'comp_mex_details', + title: 'Partidas', + icon: Package, + group: 'Compras Mex.', + modelTarget: 'InvoiceSalesDetails', + disabled: true, + }, + { + id: 'comp_mex_series', + title: 'Series', + icon: Hash, + group: 'Compras Mex.', + modelTarget: 'InvoiceSeries', + disabled: true, + }, +]; + +export const exportacionConfig: CsvUploadItem[] = [ + // Expo Def / Cam. Reg. + { + id: 'exp_def_header', + title: 'Encabezado', + icon: FileText, + group: 'Expo. Def./Cam. Reg.', + modelTarget: 'InvoiceHeader', + templateUrl: '/csv/EstructuraEncFacExpoCamReg.xls' + }, + { + id: 'exp_def_details', + title: 'Partidas', + icon: Package, + group: 'Expo. Def./Cam. Reg.', + modelTarget: 'InvoiceSalesDetails', + templateUrl: '/csv/EstructuraParExpoCamReg.xls' + }, + { + id: 'exp_def_series', + title: 'Series', + icon: Hash, + group: 'Expo. Def./Cam. Reg.', + modelTarget: 'InvoiceSeries', + disabled: true, + }, + { + id: 'exp_def_nodes', + title: 'NODES', + icon: Briefcase, + group: 'Expo. Def./Cam. Reg.', + modelTarget: 'Nodes', + disabled: true, + }, + // Expo Rep + { + id: 'exp_rep_header', + title: 'Encabezado', + icon: FileText, + group: 'Expo. Rep.', + modelTarget: 'InvoiceHeader', + disabled: true, + }, + { + id: 'exp_rep_details', + title: 'Partidas', + icon: Package, + group: 'Expo. Rep.', + modelTarget: 'InvoiceSalesDetails', + disabled: true, + }, + { + id: 'exp_rep_series', + title: 'Series', + icon: Hash, + group: 'Expo. Rep.', + modelTarget: 'InvoiceSeries', + disabled: true, + }, + // Manifiesto + { + id: 'manifest_header', + title: 'Encabezado', + icon: FileText, + group: 'Manifiesto', + modelTarget: 'Manifest', + disabled: true, + }, +]; diff --git a/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts b/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts index dc716087..8902cccb 100644 --- a/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts +++ b/frontend/src/lib/config/shortcuts/dashboard/customs_brokers/edit.ts @@ -4,6 +4,7 @@ export const obtenerAtajosEdicionAgente = (acciones: { irGeneral: () => void; irContacto: () => void; irDireccion: () => void; + irVU: () => void; guardar: () => void; cancelar: () => void; }): ShortcutDef[] => [ @@ -22,6 +23,11 @@ export const obtenerAtajosEdicionAgente = (acciones: { description: 'Tab Dirección', action: acciones.irDireccion }, + { + key: 'Alt+Digit4', + description: 'Tab Ventanilla Única', + action: acciones.irVU + }, { key: 'Ctrl+S', description: 'Guardar', diff --git a/frontend/src/lib/date-utils.ts b/frontend/src/lib/date-utils.ts index 71c7d963..e21c9f25 100644 --- a/frontend/src/lib/date-utils.ts +++ b/frontend/src/lib/date-utils.ts @@ -22,7 +22,9 @@ export function prepareDateForBackend(dateStr: string, timeStr: string = '00:00' // Combinar fecha y hora usando la zona horaria local const dateTime = toCalendarDateTime(date, time); const zonedDateTime = dateTime.toDate(localTimeZone); - return zonedDateTime.toISOString(); + // Convertir a objeto Date nativo de JavaScript para obtener ISO string correcto + const jsDate = new Date(zonedDateTime.toString()); + return jsDate.toISOString(); } catch (e) { console.error('Error parsing date:', e); return null; diff --git a/frontend/src/lib/utils/items-logic.ts b/frontend/src/lib/utils/items-logic.ts index c29a87c6..9d577c11 100644 --- a/frontend/src/lib/utils/items-logic.ts +++ b/frontend/src/lib/utils/items-logic.ts @@ -1,7 +1,6 @@ export interface Item { id?: number; - lines?: any[]; [key: string]: any; } @@ -71,36 +70,34 @@ export function cleanLineData(line: any) { // Normalize numeric values from strings to numbers (for editing) export function normalizeItemData(item: Partial): Partial { - if (item.lines && item.lines.length > 0) { - item.lines = item.lines.map((line) => { - const normalizedLine = { ...line }; + if (item) { + const normalizedItem = { ...item }; - // Normalize financials - if (normalizedLine.financial) { - const f = normalizedLine.financial; - normalizedLine.financial = { - ...f, - unit_cost_usd: f.unit_cost_usd != null ? Number(f.unit_cost_usd) : undefined, - unit_cost_mxn: f.unit_cost_mxn != null ? Number(f.unit_cost_mxn) : undefined, - value_usd: f.value_usd != null ? Number(f.value_usd) : undefined, - value_mxn: f.value_mxn != null ? Number(f.value_mxn) : undefined - }; - } + // Normalize financials + if (normalizedItem.financial) { + const f = normalizedItem.financial; + normalizedItem.financial = { + ...f, + unit_cost_usd: f.unit_cost_usd != null ? Number(f.unit_cost_usd) : undefined, + unit_cost_mxn: f.unit_cost_mxn != null ? Number(f.unit_cost_mxn) : undefined, + value_usd: f.value_usd != null ? Number(f.value_usd) : undefined, + value_mxn: f.value_mxn != null ? Number(f.value_mxn) : undefined + }; + } - // Normalize quantities - if (normalizedLine.quantity) { - const q = normalizedLine.quantity; - normalizedLine.quantity = { - ...q, - quantity: q.quantity != null ? Number(q.quantity) : undefined, - net_weight: q.net_weight != null ? Number(q.net_weight) : undefined, - gross_weight: q.gross_weight != null ? Number(q.gross_weight) : undefined, - package_quantity: q.package_quantity != null ? Number(q.package_quantity) : undefined - }; - } + // Normalize quantities + if (normalizedItem.quantity) { + const q = normalizedItem.quantity; + normalizedItem.quantity = { + ...q, + quantity: q.quantity != null ? Number(q.quantity) : undefined, + net_weight: q.net_weight != null ? Number(q.net_weight) : undefined, + gross_weight: q.gross_weight != null ? Number(q.gross_weight) : undefined, + package_quantity: q.package_quantity != null ? Number(q.package_quantity) : undefined + }; + } - return normalizedLine; - }); + return normalizedItem; } return item; diff --git a/frontend/src/routes/api-sveltekit/historical-tariff-fractions/rate/+server.ts b/frontend/src/routes/api-sveltekit/historical-tariff-fractions/rate/+server.ts new file mode 100644 index 00000000..2d51bb1a --- /dev/null +++ b/frontend/src/routes/api-sveltekit/historical-tariff-fractions/rate/+server.ts @@ -0,0 +1,71 @@ +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ cookies, url }) => { + const token = cookies.get('access_token'); + + // Configurar la URL de la API usando las variables de entorno + let apiUrl = process.env.INTERNAL_API_URL; + if (!apiUrl) { + apiUrl = process.env.VITE_API_URL; + // Reemplazar 'localhost' con 'backend' para llamadas desde el servidor (SSR) + apiUrl = apiUrl?.replace('localhost', 'backend').replace('127.0.0.1', 'backend'); + } + + // Normalizar la URL + const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; + + // Get query parameters (historical_fraction, country, fraction_type, invoice_date, sector) + const searchParams = new URLSearchParams(url.search); + const queryString = searchParams.toString(); + + try { + const fetchUrl = `${baseUrl}v1/a76/historical-tariff-fractions/rate?${queryString}`; + + const response = await fetch(fetchUrl, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}` + } + }); + + if (!response.ok) { + const errorText = await response.text(); + console.error('Error response from backend:', errorText); + return new Response( + JSON.stringify({ + error: 'Failed to fetch historical tariff rate', + details: errorText + }), + { + status: response.status, + headers: { + 'Content-Type': 'application/json' + } + } + ); + } + + const data = await response.json(); + return new Response(JSON.stringify(data), { + status: 200, + headers: { + 'Content-Type': 'application/json' + } + }); + } catch (error) { + console.error('Error in historical-tariff-fractions/rate API route:', error); + return new Response( + JSON.stringify({ + error: 'Internal server error', + message: error instanceof Error ? error.message : 'Unknown error' + }), + { + status: 500, + headers: { + 'Content-Type': 'application/json' + } + } + ); + } +}; diff --git a/frontend/src/routes/dashboard/+layout.svelte b/frontend/src/routes/dashboard/+layout.svelte index 95c9163b..44acac62 100644 --- a/frontend/src/routes/dashboard/+layout.svelte +++ b/frontend/src/routes/dashboard/+layout.svelte @@ -58,7 +58,7 @@
- {@render children()} + {@render children?.()}
diff --git a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte index ba7e4207..8f5bbad8 100644 --- a/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/clients_and_providers/edit/[[id]]/+page.svelte @@ -233,8 +233,6 @@ import { useShortcuts } from '$lib/hooks/use-shortcuts'; import { obtenerAtajosEdicionSocio } from '$lib/config/shortcuts/dashboard/clients_and_providers/edit'; - // ... previous imports / code ... - function handleCancel() { goto('/dashboard/clients_and_providers'); } @@ -271,7 +269,7 @@ Nuevo {/if}
-

+

{isEditing ? 'Edita la información del cliente o proveedor' : 'Registra un nuevo cliente o proveedor en el sistema'} @@ -314,11 +312,11 @@

- (formData.client_or_provider = v)} - > + (formData.client_or_provider = v)} + > {typeLabels[formData.client_or_provider] || 'Selecciona un tipo'} @@ -331,8 +329,8 @@
-
-
+
+
- (formData.type_nat_foreign = v)} - > + (formData.type_nat_foreign = v)} + > {formData.type_nat_foreign === 'N' ? 'Nacional' @@ -403,7 +401,7 @@ Ubicación fiscal y datos de contacto. -
+
-
+
-
+
@@ -488,7 +486,7 @@ -
+
@@ -597,7 +595,7 @@
-
+
@@ -606,7 +604,7 @@

-
+
-
+
diff --git a/frontend/src/routes/dashboard/csv-upload/+page.svelte b/frontend/src/routes/dashboard/csv-upload/+page.svelte new file mode 100644 index 00000000..6c55bc56 --- /dev/null +++ b/frontend/src/routes/dashboard/csv-upload/+page.svelte @@ -0,0 +1,209 @@ + + +
+ +
+
+

Importación Masiva de Datos (CSV)

+
+ + + + Catálogos + Transportes + Importación + Exportación + + +
+ +
+

Catálogos Generales

+
+ +
+ + +
+

Logística y Transporte

+
+ +
+ + +
+

Operaciones de Importación

+
+ +
+ + +
+

Operaciones de Exportación

+
+ +
+
+
+ +
+
+ + + {#if allSettings[activeTab]} +
+ +
+ {/if} +
+ + { + if (currentJobId && activeModelTarget) { + try { + isUploading = true; + const res = await api.imports.commit(currentJobId, activeModelTarget); + if (res.data?.commit_job_id) { + currentJobId = res.data.commit_job_id; + pollStatus(); + } + } catch (err) { + toast.error('Error al iniciar la importación'); + isUploading = false; + } + } + }} + onCancel={() => { + currentJobId = null; + scanResults = null; + commitResults = null; + showResultModal = false; + }} + onClose={() => { + currentJobId = null; + scanResults = null; + commitResults = null; + showResultModal = false; + }} +/> diff --git a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte index 264e7d8a..801303a2 100644 --- a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte @@ -8,6 +8,8 @@ } from '$lib/api/dashboard/a76/customs-brokers'; // UI Components + import CountryDialog from '$lib/components/dashboard/invoices/edit/items/fa/country-dialog.svelte'; + import StateDialog from '$lib/components/dashboard/invoices/edit/items/fa/state-dialog.svelte'; import { Button } from '$lib/components/ui/button'; import { Input } from '$lib/components/ui/input'; import { Label } from '$lib/components/ui/label'; @@ -15,6 +17,7 @@ import { Badge } from '$lib/components/ui/badge'; import * as Tabs from '$lib/components/ui/tabs'; import * as Card from '$lib/components/ui/card'; + import * as Select from '$lib/components/ui/select'; import { ArrowLeft, Loader2, @@ -24,7 +27,18 @@ MapPin, Settings, FileText, - Hash + Hash, + FileKey, + Key, + Globe, + Folder, + Mail, + UserRound, + Fingerprint, + Lock, + Signature, + Archive, + ShieldCheck } from 'lucide-svelte'; import { toast } from 'svelte-sonner'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; @@ -40,6 +54,8 @@ let activeTab = $state('general'); let error = $state(null); let dataLoaded = $state(false); + let showCountryDialog = $state(false); + let showStateDialog = $state(false); let formData = $state({ broker_key: '', @@ -62,6 +78,28 @@ company_id: '' }); + let vuData = $state({ + certificate_path: '', + key_path: '', + xml_files_path: '', + fiel_access_key: '', + doda_web_service_user: '', + doda_web_service_access_key: '', + doda_certificate_path: '', + doda_key_path: '', + doda_fiel_access_key: '', + doda_xml_files_path: '', + web_service_user: '', + web_service_access_key: '', + query_tax_id: '', + vu_email: '', + vu_figure_type: '', + fiel_format: '', + access_key: '', + signature_read_path: '', + archive_path: '' + }); + let brokerKeyError = $state(false); let licenseError = $state(false); let brokerKeyTimeout: ReturnType; @@ -77,6 +115,16 @@ } }); + // --- 5. FUNCIONES --- + function handleLocalFileSelect(event: Event, targetKey: keyof typeof vuData) { + const input = event.target as HTMLInputElement; + const file = input.files?.[0]; + if (file) { + vuData[targetKey] = file.name; + toast.success(`Archivo ${file.name} seleccionado`); + } + } + async function loadBrokerData(key: string, cId: string) { if (!key || key === 'undefined') return; loading = true; @@ -106,9 +154,32 @@ company: d.company || '', company_id: cId }; + if (d.vu) { + vuData = { + certificate_path: d.vu.certificate_path || '', + key_path: d.vu.key_path || '', + xml_files_path: d.vu.xml_files_path || '', + fiel_access_key: d.vu.fiel_access_key || '', + doda_web_service_user: d.vu.doda_web_service_user || '', + doda_web_service_access_key: d.vu.doda_web_service_access_key || '', + doda_certificate_path: d.vu.doda_certificate_path || '', + doda_key_path: d.vu.doda_key_path || '', + doda_fiel_access_key: d.vu.doda_fiel_access_key || '', + doda_xml_files_path: d.vu.doda_xml_files_path || '', + web_service_user: d.vu.web_service_user || '', + web_service_access_key: d.vu.web_service_access_key || '', + query_tax_id: d.vu.query_tax_id || '', + vu_email: d.vu.vu_email || '', + vu_figure_type: d.vu.vu_figure_type || '', + fiel_format: d.vu.fiel_format || '', + access_key: d.vu.access_key || '', + signature_read_path: d.vu.signature_read_path || '', + archive_path: d.vu.archive_path || '' + }; + } dataLoaded = true; } else if (d.error) { - error = d.error; + error = d.error as string; toast.error(error); } } catch (e: any) { @@ -119,6 +190,18 @@ } } + function handleCountrySelect(country: any) { + const nextCountry = country.m3_key || country.mex_key || country.ame_key; + if (formData.country !== nextCountry) { + formData.state = ''; + } + formData.country = nextCountry; + } + + function handleStateSelect(state: any) { + formData.state = state.m3_key || state.mex_key || state.ame_key; + } + // --- 4. GUARDADO --- async function handleSave() { if (!companyStore.activeCompany) { @@ -151,15 +234,31 @@ formData.company_id = cId; const res = isEdit - ? await customsBrokersApi.update(routeId!, formData, cId) + ? await customsBrokersApi.update(routeId!, formData) : await customsBrokersApi.create(formData, cId); if ((res as any).error) throw new Error((res as any).error); + // UPSERT VU + try { + const vuRes = await customsBrokersApi.updateVU(formData.broker_key, vuData, cId); + if ((vuRes as any).error) { + toast.error( + 'Agente guardado, pero ocurrió un error guardando Ventanilla Única: ' + + (vuRes as any).error + ); + return; // Avoid triggering success redirection + } + } catch (vuErr: any) { + toast.error('Agente guardado, pero ocurrió un error guardando Ventanilla Única.'); + console.error(vuErr); + return; + } + toast.success(isEdit ? 'Agente actualizado' : 'Agente creado'); goto('/dashboard/customs_brokers'); } catch (e: any) { - error = e.message || 'Error al procesar la solicitud'; + error = (e.message || 'Error al procesar la solicitud') as string; toast.error(error); } finally { loading = false; @@ -176,6 +275,7 @@ irGeneral: () => (activeTab = 'general'), irContacto: () => (activeTab = 'contact'), irDireccion: () => (activeTab = 'address'), + irVU: () => (activeTab = 'vu'), guardar: handleSave, cancelar: handleCancel }) @@ -197,7 +297,7 @@ {isEdit ? 'Edición' : 'Nuevo'}
-

+

{isEdit ? 'Modifica la información del agente aduanal' : 'Registra un nuevo agente aduanal en el sistema'} @@ -224,7 +324,31 @@ Identificación oficial del agente y patente. -

+
+
+ + (formData.type = v)} + disabled={loading} + > + + {formData.type === 'MEX' + ? 'Agente Aduanal Mexicano' + : formData.type === 'USA' + ? 'Agente Aduanal Americano (Broker)' + : 'Selecciona un tipo...'} + + + Agente Aduanal Mexicano + Agente Aduanal Americano (Broker) + + +
+
+ +
{#if brokerKeyError} @@ -281,8 +405,8 @@ } }} placeholder="Ej. 3421" - maxlength="5" - class={licenseError ? 'border-red-500 focus-visible:ring-red-500' : ''} + maxlength={5} + class={`h-10 ${licenseError ? 'border-red-500 focus-visible:ring-red-500' : ''}`} disabled={loading} /> {#if licenseError} @@ -297,16 +421,22 @@
- +
-
+
@@ -315,6 +445,7 @@ bind:value={formData.personal_id} placeholder="CURP si aplica" disabled={loading} + class="h-10" />
@@ -330,13 +461,14 @@ Datos para comunicación con el agente. -
+
@@ -345,24 +477,26 @@ bind:value={formData.position} placeholder="Ej. Gerente Comercial" disabled={loading} + class="h-10" />
-
+
- +
@@ -371,6 +505,7 @@ bind:value={formData.email} placeholder="correo@empresa.com" disabled={loading} + class="h-10" />
@@ -392,26 +527,501 @@ bind:value={formData.address} placeholder="Dirección completa" disabled={loading} + class="h-10" />
-
+
- +
- +
-
+
- +
+ (showStateDialog = true)} + /> + +
- +
+ (showCountryDialog = true)} + /> + +
+
+
+ + + + + + + + + + Ventanilla Única / Web Services + Certificados y credenciales para integración con DODA/PITA. + + +
+
+ +
+ + handleLocalFileSelect(e, 'certificate_path')} + id="vu-cert-file" + /> + +
+
+
+ +
+ + handleLocalFileSelect(e, 'key_path')} + id="vu-key-file" + /> + +
+
+
+ +
+
+ + +
+
+ + + + {vuData.vu_figure_type || 'Seleccionar tipo de figura'} + + + AGENTE ADUANAL + APODERADO ADUANAL + MANDATARIO + + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + handleLocalFileSelect(e, 'xml_files_path')} + id="vu-cove-file" + /> + +
+
+
+ + + +
+

+ Configuración Adicional +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + + + + + DODA-PITA + Configuración de servicios DODA / PITA. + + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + handleLocalFileSelect(e, 'doda_certificate_path')} + id="doda-cert-file" + /> + +
+
+
+ +
+ + handleLocalFileSelect(e, 'doda_key_path')} + id="doda-key-file" + /> + +
+
+
+ +
+
+ + +
+
+ +
+ + handleLocalFileSelect(e, 'doda_xml_files_path')} + id="doda-xml-file" + /> + +
+
+
+
+
+
+ + + + ANAM + Configuración de acceso para ANAM. + + +
+
+ + +
+
+ +
@@ -424,22 +1034,19 @@
-
+
- - - General - - - Contacto - - - Dirección - + + General + Contacto + Domicilio + VU + DODA + ANAM
diff --git a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte index 7412466e..43c1d7d2 100644 --- a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte @@ -1,9 +1,9 @@ -
+
@@ -646,7 +772,7 @@
{:else}
@@ -690,7 +816,6 @@
-
@@ -723,449 +848,428 @@
- -
-

Sectores

-
-
- - -
-
- - -
-
- - +
+

Sectores

+
+
+ + +
+
+ + +
+
+ + +
-
- - -
-
- - + + + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
- - + +
-
-
-
- - -
-
- - -
-
-
- - -
- - + + - -
-

Certificaciones OEA/NEEC

-
-
- - +
+

Certificaciones OEA/NEEC

+
+
+ + +
+
+ + +
-
- - +
+
+ + +
+
+ (formData.is_oea_company = checked ? 1 : 0)} + /> + +
+
+ (formData.neec_company = checked ? 1 : 0)} + /> + +
-
-
- - -
-
- (formData.is_oea_company = checked ? 1 : 0)} - /> - -
-
- (formData.neec_company = checked ? 1 : 0)} - /> - -
-
-
- -
-

Certificación General

-
-
- - -
-
- - -
-
- - -
-
- - +
+

Certificación General

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- -
-

Anexo 31

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - +
+

Anexo 31

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- + - - - -
-

Dirección Principal

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - + +
+

Dirección Principal

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- -
-

Dirección Industrial 1

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - +
+

Dirección Industrial 1

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- -
-

Dirección Industrial 2

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - +
+

Dirección Industrial 2

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- + - - -
+

Configuración General

-
+
-
+
@@ -1176,372 +1280,555 @@
- -
-

Configuraciones Técnicas

-
-
- (formData.active_labels = checked ? 1 : 0)} - /> - +
+

Configuraciones Técnicas

+
+
+ (formData.active_labels = checked ? 1 : 0)} + /> + +
+
+ (formData.active_fractions = checked ? 1 : 0)} + /> + +
+
+ (formData.activate_caat = checked ? 1 : 0)} + /> + +
+
+ (formData.trans_interface = checked ? 1 : 0)} + /> + +
+
+ (formData.american_costs = checked ? 1 : 0)} + /> + +
+
+ (formData.scaf_readonly = checked ? 1 : 0)} + /> + +
+
+ (formData.parts_replacement = checked ? 1 : 0)} + /> + +
+
+ (formData.activate_facmexame = checked ? 1 : 0)} + /> + +
+
+ (formData.part_reference = checked ? 1 : 0)} + /> + +
+
+ (formData.international_firm = checked ? 1 : 0)} + /> + +
+
-
- (formData.active_fractions = checked ? 1 : 0)} - /> - -
-
- (formData.activate_caat = checked ? 1 : 0)} - /> - -
-
- (formData.trans_interface = checked ? 1 : 0)} - /> - -
-
- (formData.american_costs = checked ? 1 : 0)} - /> - -
-
- (formData.scaf_readonly = checked ? 1 : 0)} - /> - -
-
- (formData.parts_replacement = checked ? 1 : 0)} - /> - -
-
- (formData.activate_facmexame = checked ? 1 : 0)} - /> - -
-
- (formData.part_reference = checked ? 1 : 0)} - /> - -
-
- (formData.international_firm = checked ? 1 : 0)} - /> - -
-
-
- -
-

Identificadores y Operación

-
-
- - +
+

Identificadores y Operación

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - -
-
- - -
-
- - -
-
-
- -
-

Configuraciones Avanzadas

-
-
- - +
+

Configuraciones Avanzadas

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-

Prevalidador Aduanal

-
-
- - +
+

Prevalidador Aduanal

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - -
-
- - -
-
- - -
-
-
- -
-

Ventanilla Única

-
-
- - +
+

Ventanilla Única

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-

Agente Aduanal Electrónico

-
-
- - +
+

Agente Aduanal Electrónico

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-

CFDI - Facturación Electrónica

-
-
- - +
+

CFDI - Facturación Electrónica

+
+
+ + +
+
+ + +
+
+ + +
+
-
- - + + + + +
+
+ +

Firma Electrónica Avanzada (FIEL)

+
+
+
+ +
+ handleCertificateSelect(e, 'fiel_cer')} + /> + +
+
+
+ +
+ handleCertificateSelect(e, 'fiel_key')} + /> + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
- - + + +
+
+ +

Certificado de Sellos Digitales (CSD)

+
+
+
+ +
+ handleCertificateSelect(e, 'cfdi_cert_cer')} + /> + +
+
+
+ +
+ handleCertificateSelect(e, 'cfdi_cert_key')} + /> + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
-
-
- + + +
+
+ +

Certificado de Cancelación (Opcional)

+
+
+
+ +
+ handleCertificateSelect(e, 'cancel_cer')} + /> + +
+
+
+ +
+ handleCertificateSelect(e, 'cancel_key')} + /> + +
+
+
+ + +
+
+ + +
+
+
+
-
-
- +
- + General @@ -1566,11 +1853,14 @@ Config + + + Certif. Digitales +
-
+ + +
+ +

+ {formData.eccn_code || '---'} +

+
@@ -752,6 +563,48 @@ companyId ); + // También actualizar la extensión FA + if (selectedClass.fa_class_id) { + await faClassesApi.update( + selectedClass.fa_class_id, + { + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null + }, + companyId + ); + } else { + await faClassesApi.create( + { + class_id: selectedClass.id, + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null, + class_enabled: true + }, + companyId + ); + } + // ¡IMPORTANTE! fetchApi NO lanza excepciones, retorna { error, status } if (response.error) { console.error('❌ Error en respuesta de actualización:', response); @@ -770,8 +623,18 @@ sub_key: cleanData.sub_key || '', physical_review: cleanData.physical_review ? 1 : 0, iva_exempt_fraction: cleanData.iva_exempt_fraction || '', - depreciation_rate: cleanData.depreciation_rate || null, - fda_code: cleanData.fda_code || null, + depreciation_rate: + cleanData.annual_depreciation_rate !== undefined && + cleanData.annual_depreciation_rate !== null && + cleanData.annual_depreciation_rate !== '' + ? Number(cleanData.annual_depreciation_rate) + : cleanData.depreciation_rate !== undefined && + cleanData.depreciation_rate !== null && + cleanData.depreciation_rate != null + ? Number(cleanData.depreciation_rate) + : null, + fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, + eccn_code: cleanData.eccn_code || null, class_enabled: true }; diff --git a/frontend/src/routes/dashboard/invoices/+page.svelte b/frontend/src/routes/dashboard/invoices/+page.svelte index f3ebcc7c..e6a1f74c 100644 --- a/frontend/src/routes/dashboard/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/+page.svelte @@ -3,6 +3,7 @@ import { page } from '$app/stores'; import { goto } from '$app/navigation'; import InvoiceDownloadModal from '$lib/components/dashboard/invoices/invoice-download-modal.svelte'; + import TransferenciaElectronicaModal from '$lib/components/dashboard/invoices/transferencia-electronica-modal.svelte'; import { invoicesApi, type Invoice, type OperationType } from '$lib/api/dashboard/a76/invoices'; import { invoicesReportsApi } from '$lib/api/dashboard/a76/reports/reports-invoices'; import { consolidatedReportsApi } from '$lib/api/dashboard/a76/reports/reports-consolidated'; @@ -25,7 +26,8 @@ Boxes, Package, ClipboardList, - Settings + Settings, + Send } from 'lucide-svelte'; // IMPORTANTE: Asegúrate de tener instalada svelte-sonner para las notificaciones @@ -49,6 +51,7 @@ }); let isDownloadModalOpen = $state(false); + let isTransferenciaModalOpen = $state(false); // Efecto reactivo para actualizar filtros cuando cambian los query parameters en la URL $effect(() => { @@ -187,7 +190,7 @@ selectedInvoiceId = null; } else { selectedInvoiceId = invoice.id; - } + } } const selectedInvoice = $derived( @@ -581,6 +584,36 @@ reloadData(); } + async function handleUpdateStatus(status: boolean) { + if (!selectedInvoice || !companyStore.activeCompany) { + toast.info('Seleccione una factura para cambiar su estatus'); + return; + } + + loading = true; + try { + const companyId = companyStore.activeCompany.id; + const response = await invoicesApi.update(selectedInvoice.id, companyId, { + id: selectedInvoice.id, + is_updated: status + }); + + if (response.error) { + toast.error( + `Error al ${status ? 'actualizar' : 'desactualizar'} factura: ${response.error}` + ); + } else { + toast.success(`Factura ${status ? 'actualizada' : 'desactualizada'} correctamente`); + reloadData(); + } + } catch (e) { + console.error('Error updating status:', e); + toast.error('Error inesperado al cambiar el estatus'); + } finally { + loading = false; + } + } + // Opciones de tipo de operación para el filtro const operationTypeOptions = [ { value: '', label: 'Todas' }, @@ -782,11 +815,21 @@
- - @@ -830,6 +873,16 @@ Packing List + + {#if selectedInvoice?.operation_type === 'exp'}
diff --git a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte index 506ec342..df9e4fec 100644 --- a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte @@ -225,7 +225,7 @@ // Función para mapear la factura existente a los formData function mapInvoiceToTopFields(invoice: any) { if (!invoice) return topFieldsSkeleton; - + let operationType: string | null = null; if (invoice.operation_type) { operationType = invoice.operation_type; @@ -251,7 +251,7 @@ function mapInvoiceToGeneral(invoice: any) { if (!invoice) return generalSkeleton; - + return { provider_header: invoice.compliance_mx?.provider_header || 'proveedor', provider_id: invoice.compliance_mx?.provider_id || null, @@ -278,7 +278,7 @@ function mapInvoiceToObservations(invoice: any) { if (!invoice) return observationSkeleton; - + return { observation_es: invoice.observation_es || '', observation_en: invoice.observation_en || '', @@ -300,7 +300,7 @@ function mapInvoiceToItems(invoice: any) { if (!invoice) return ensureItemsFormData(null); - + return { items: invoice.items || [] }; @@ -308,7 +308,7 @@ function mapInvoiceToOthers(invoice: any) { if (!invoice) return othersSkeleton; - + return { comments_status: invoice.comments_status || '', transport_mode: invoice.logistics?.transport_mode || 'TRUCK', @@ -337,7 +337,7 @@ function mapInvoiceToContinuation(invoice: any) { if (!invoice) return continuationSkeleton; - + return { numero_tipo_transporte: invoice.logistics?.numero_tipo_transporte || '', es_ferrocarril: invoice.logistics?.es_ferrocarril || 'no', @@ -351,10 +351,13 @@ funge_como_cd: invoice.logistics?.acts_as_cd || false, llego_pedimento: invoice.compliance_mx?.llego_pedimento || false, errores_facturacion: invoice.errores_facturacion || [], - semaforo_verde_aduana_mexicana: invoice.compliance_mx?.semaforo_verde_aduana_mexicana || false, - semaforo_verde_aduana_americana: invoice.compliance_mx?.semaforo_verde_aduana_americana || false, + semaforo_verde_aduana_mexicana: + invoice.compliance_mx?.semaforo_verde_aduana_mexicana || false, + semaforo_verde_aduana_americana: + invoice.compliance_mx?.semaforo_verde_aduana_americana || false, semaforo_rojo_aduana_mexicana: invoice.compliance_mx?.semaforo_rojo_aduana_mexicana || false, - semaforo_rojo_aduana_americana: invoice.compliance_mx?.semaforo_rojo_aduana_americana || false, + semaforo_rojo_aduana_americana: + invoice.compliance_mx?.semaforo_rojo_aduana_americana || false, is_mixed: invoice.compliance_mx?.is_mixed || false, reason_export: invoice.compliance_mx?.reason_export || '1', purchase_order: invoice.purchase_order || '', @@ -405,8 +408,8 @@ !data.isCreate ? !!data.invoice : !!data.defaultSettings?.observationFormData ); let itemsExists = $state( - !data.isCreate - ? !!(data.invoice?.items && data.invoice.items.length > 0) + !data.isCreate + ? !!(data.invoice?.items && data.invoice.items.length > 0) : !!data.defaultSettings?.itemsFormData?.items?.length ); let othersExists = $state( @@ -484,7 +487,7 @@ const actualResponse = response as any; const items = actualResponse.data?.items || []; - if (items.length === 0) { + if (items.length === 0) { if (!uiStore.isExchangeRateDialogOpen) { missingExchangeRateDate = date; showExchangeRateDialog = true; diff --git a/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte b/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte index 41c8a056..3fc358b1 100644 --- a/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte @@ -153,17 +153,13 @@ function handleAddItem() { isItemEditMode = false; editingItemIndex = null; - editingItem = { - lines: [ - { - line_number: (selectedPreset.items?.length || 0) + 1, - quantity: { quantity: 1 }, - financial: { unit_cost_usd: 0 }, - customs: {}, - description: {}, - reference: {} - } - ] + editingItem = { + line_number: (selectedPreset.items?.length || 0) + 1, + quantity: { quantity: 1 }, + financial: { unit_cost_usd: 0 }, + customs: {}, + description: {}, + reference: {} }; showItemSheet = true; } @@ -463,7 +459,7 @@
- {item.lines?.[0]?.description?.description_spanish || 'Sin descripción'} + {item?.description?.description_spanish || 'Sin descripción'} {#if item.reference_number} @@ -473,12 +469,12 @@
{item.lines?.[0]?.quantity?.quantity || 0}{item?.quantity?.quantity || 0} - ${(item.lines?.[0]?.financial?.unit_cost_usd || 0).toLocaleString()} + ${(item?.financial?.unit_cost_usd || 0).toLocaleString()}
diff --git a/frontend/src/routes/dashboard/pedimentos/+page.svelte b/frontend/src/routes/dashboard/pedimentos/+page.svelte index dd9613e9..6898d88d 100644 --- a/frontend/src/routes/dashboard/pedimentos/+page.svelte +++ b/frontend/src/routes/dashboard/pedimentos/+page.svelte @@ -85,7 +85,7 @@ function handleRowClick(pedimento: Pedimento) { // Toggle: si ya está seleccionado, deseleccionar; si no, seleccionar - selectedId = selectedId === pedimento.id ? null : pedimento.id; + selectedId = selectedId === pedimento.id ? null : pedimento.id; } function handleEditSelected() { @@ -149,6 +149,11 @@ try { const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -194,7 +199,12 @@ error = null; try { - const companyId = companyStore.activeCompany?.id || 1; + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -248,7 +258,12 @@ error = null; try { - const companyId = companyStore.activeCompany.id; + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'No hay compañía seleccionada'; + loading = false; + return; + } const filterParams = { status: filters.status || undefined, @@ -334,17 +349,17 @@ -
+
{ + const input = e.currentTarget; + if (input && typeof input.showPicker === 'function') { + input.showPicker(); + } + }} + /> +
+
+ + { + const input = e.currentTarget; + if (input && typeof input.showPicker === 'function') { + input.showPicker(); + } + }} + /> +
+
+ + + +
+ +
+ +
+ {#each Object.keys(types.import) as key} +
+ + +
+ {/each} +
+
+ + +
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ {#each Object.keys(types.export.additional) as key} +
+ + +
+ {/each} +
+
+
+ + +
+ +
+ {#each Object.keys(types.other) as key} +
+ { + if (key === 'TODAS') handleTodasChange(v as boolean); + }} + /> + +
+ {/each} +
+
+
+ + + + + + + + Filtros e Identificadores + + + +
+ {#each [{ label: 'Proveedor', key: 'provider' as const }, { label: 'Vendido a', key: 'soldTo' as const }, { label: 'Clave de Pedimento', key: 'pedimentoKey' as const }] as item} +
+ +
+ + +
+
+ {/each} +
+ +
+ +
+ +
+ + +
+ + +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + + + + + Configuración Final + + + +
+
+ + +
+ + +
+
+ + +
+
+
+ +
+ + +
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+ +
+
+ + +
+ + +
+
+ + +
+
+
+
+ + +
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + + +
+
+ + + { + if (!v) showResults = false; + }} + > + + +
+
+ + + {reportTitle} + + + {results.length} registros encontrados • {currencyLabel} + +
+
+ + + + Cerrar + +
+
+
+ +
+
+
+ + + {#each config.reportType === 'normal' ? ['PEDIMENTO', 'CLAVE', 'FACTURA', 'FECHA FACT', 'VALOR COM.', 'TIPO OPER.', 'ESTATUS', 'PROYECTO'] : ['PEDIMENTO', 'FACTURA', 'FECHA FACT', 'PROVEEDOR', 'CLIENTE', 'CANTIDAD', 'DESC. ESPAÑOL', 'TIPO OPER.'] as header} + + {/each} + + + + {#each results as row} + + {#if config.reportType === 'normal'} + + + + + + + + + {:else} + {@const detailRow = row as MovementItemDetailed} + + + + + + + + + {/if} + + {/each} + +
+ {header} +
{row.Pedimento || '-'}{row.ClavePed || '-'}{row.Factura}{formatDateFromYYYYMMDD(row.FechaFactura)}${formatCurrency(row.ValorComercialMN)} + + {row.TipoMovTemDef} + + + + {row.Estatus || 'A'} + + {row.BaseDeDatos}{detailRow.Pedimento || '-'}{detailRow.Factura}{formatDateFromYYYYMMDD(detailRow.FechaFactura)}{detailRow.Proveedor || '-'}{detailRow.VendidoA || '-'}{detailRow.CantidadIE || '0'}{detailRow.DescripcionE || '-'} + + {detailRow.TipoMovTemDef} + +
+
+
+ + +
+ + + + + + + Seleccionar {dialogType === 'pedimentoKey' + ? 'Clave de Pedimento' + : dialogType === 'provider' + ? 'Proveedor' + : 'Cliente'} + + + Busca y selecciona {dialogType === 'pedimentoKey' + ? 'una clave de pedimento' + : dialogType === 'provider' + ? 'un proveedor' + : 'un cliente'} de la lista + + + +
+
+ + +
+ +
+ {#if dialogType === 'pedimentoKey'} + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)} + > + + + + + {/each} + {/if} + +
CódigoDescripciónAcción
+ No se encontraron resultados +
{item.code || '-'}{item.description || '-'} + +
+ {:else} + + + + + + + + + + + + + + + + + {#if filteredItems.length === 0} + + + + {:else} + {#each filteredItems as item} + selectItem(item)} + > + + + + + + + + + + + + {/each} + {/if} + +
ClaveNombreTipoRFCCallesNúm. ExtCPColoniaCiudadAcción
+ No se encontraron resultados +
{item.id || '-'}{item.name || '-'} + + {item.client_or_provider === 'provider' + ? 'P' + : item.client_or_provider === 'client' + ? 'C' + : 'A'} + + {item.rfc || '-'}{item.address?.streets || '-'}{item.address?.exterior_number || '-'}{item.address?.postal_code || '-'}{item.address?.neighborhood || '-'}{item.address?.city || '-'} + +
+ {/if} +
+
+ + + + +
+
+ + + + +{#if contextMenu.open} +
+ +
+{/if} diff --git a/frontend/static/csv/EstructuraCatAgenteAduanal.xls b/frontend/static/csv/EstructuraCatAgenteAduanal.xls new file mode 100644 index 00000000..8978a33e --- /dev/null +++ b/frontend/static/csv/EstructuraCatAgenteAduanal.xls @@ -0,0 +1 @@ +TIPO(MEX=Mexicano,AME=AMERICANO) CLAVE AADUANAL PATENTE NOMBRE RFC DIRECCION CODIGO POSTAL CIUDAD ESTADO PAIS TELEFONO NUMERO FAX CORREO ELECTRONICO CURP diff --git a/frontend/static/csv/EstructuraCatClasesAF.xls b/frontend/static/csv/EstructuraCatClasesAF.xls new file mode 100644 index 00000000..96b7891a --- /dev/null +++ b/frontend/static/csv/EstructuraCatClasesAF.xls @@ -0,0 +1 @@ +CLAVE CLASE DESCRIPCION ESPAOL DESCRIPCION INGLES TIPO DE MATERIAL U.M. COMERCIAL FRACCION ARANCELARIA FRACCION AMERICANA TASA DE DEPRECIACION REVISION FISICA (1/0) CODIGO DE PRODUCTO/SERVICIO CP diff --git a/frontend/static/csv/EstructuraCatClienteProv.xls b/frontend/static/csv/EstructuraCatClienteProv.xls new file mode 100644 index 00000000..1b2096cc --- /dev/null +++ b/frontend/static/csv/EstructuraCatClienteProv.xls @@ -0,0 +1 @@ +PROCEDENCIA CLIENTE(E=Extranjero, N=Nacional) TIPO(C=Cliente,P=Proveedor,A=Ambos) CLAVE CLIENTE NOMBRE RFC CALLES NUM. EXTERIOR CODIGO POSTAL COLONIA o PARQUE IND. CIUDAD ESTADO PAIS TELEFONO NUMERO FAX CORREO ELECTRONICO CURP TIPO DE PROGRAMA SECON NUMERO DE PROGRAMA SECON FECHA AUT. SECON ##/##/#### ES PROGRAMA PROSEC? (SI o NO) NUMERO DE PROGRAMA PROSEC VINCULACION ES EMPRESA CERTIFICADA? REGISTRO DE EMPRESA CERT. INFORMACION ADICIONAL CONTACTO CLAVE MANUFACTURERO TAX I.D. CLAVE BROKER AMERICANO EXPO CLAVE BROKER AMERICANO IMPO CLAVE TRANSFERENCIA A.A. TRANSFORMADOR/SUBMAQUILA CLAVE INTERFACE diff --git a/frontend/static/csv/EstructuraCatConductor.xls b/frontend/static/csv/EstructuraCatConductor.xls new file mode 100644 index 00000000..30482cb7 --- /dev/null +++ b/frontend/static/csv/EstructuraCatConductor.xls @@ -0,0 +1 @@ +TRANSPORTISTA LINEA CLAVE CONDUCTOR LICENCIA PERMISO LINEA EXPRESS IDENTIFICACION ACE FECHA NACIMIENTO SEXO PAIS NACIMIENTO TRANSPORTA MAT. PELIGROSO? PERMISO MAT. PELIGROSO NOMBRE(S) APELLIDO PATERNO FORMA IDENTIFICACION 1 NUM. IDENTIFICACION 1 ESTADO PAIS FORMA IDENTIFICACION 2 NUM. IDENTIFICACION 2 ESTADO PAIS diff --git a/frontend/static/csv/EstructuraCatFraccAme.xls b/frontend/static/csv/EstructuraCatFraccAme.xls new file mode 100644 index 00000000..dc1f5495 --- /dev/null +++ b/frontend/static/csv/EstructuraCatFraccAme.xls @@ -0,0 +1 @@ +FRACCION ARANCELARIA PREFIJO UNIDAD DE MEDIDA DESCRIPCION TIPO DE ADVALOREM ADVALOREM % ADVALOREM DLLS diff --git a/frontend/static/csv/EstructuraCatPartesAF.xls b/frontend/static/csv/EstructuraCatPartesAF.xls new file mode 100644 index 00000000..e989d04f --- /dev/null +++ b/frontend/static/csv/EstructuraCatPartesAF.xls @@ -0,0 +1 @@ +NUMERO DE PARTE DESCRIPCION EN ESPAOL DESCRIPCION EN INGLES CLASE UNIDAD DE MEDIDA COMERCIAL COSTO UNITARIO TIPO MONEDA COSTO CLAVE MONEDA PESO UNITARIO TIPO PESO FRACCION PAIS PREFERENCIA SECTOR RUTA DE LA IMAGEN diff --git a/frontend/static/csv/EstructuraCatPedimentos.xls b/frontend/static/csv/EstructuraCatPedimentos.xls new file mode 100644 index 00000000..b2e2f7f2 --- /dev/null +++ b/frontend/static/csv/EstructuraCatPedimentos.xls @@ -0,0 +1 @@ +NUMERO DE PEDIMENTO (##-####-######) TIPO MOV(I=Impotacin,E=Expotacin) CLAVE PEDIMENTO REGIMEN FECHA INICIO FECHA FINAL FECHA DE PAGO ADUANA Y SECCION DE CRUCE ACUSE ELECTRONICO INDIVIDUAL o CONSOLIDADO (IND,CON) MET TRANS ENTRADA MET TRANS ARRIVO MET TRANS SALIDA IEPS DTA CNT PREVALIDACION MONTO TIGIE PAGO IMPUESTO? (S/N) ES MIXTO (SI/NO) OBS RECTIFICA OPCION DESTINO(Interior del Pais/Regin Fronteriza/Franja Fronteriza) VALOR IVA VALOR ME VALOR ADUANAS FLETE VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES ESTATUS (ABIERTO/CERRADO) PERSONA REV FECHA CIERRE FECHA REVISION FECHA AUTORIZACION FECHA RECIBIDO REPRESENTANTE AA CLAVE DEST ORIGEN FECHA ENTRADA RECINTO FECHA EXTRACCION RECINTO ERRORES FORMA PAGO DTA FORMA PAGO IGI FORMA PAGO PREVAL FORMA PAGO IVA RECARGOS MULTAS IVA DE PREV CUOTAS CONPENSATORIAS IDENTIFICADORES IEPS 2 FORMA DE PAGO IEPS 2 DTA 2 FORMA DE PAGO DTA 2 IVA 2 FORMA DE PAGO IVA 2 IGI 2 FORMA DE PAGO IGI 2 PREVALIDACION FORMA DE PAGO PREVALIDACION 2 CNT 2 FORMA DE PAGO CNT 2 diff --git a/frontend/static/csv/EstructuraCatTiposCambio.xls b/frontend/static/csv/EstructuraCatTiposCambio.xls new file mode 100644 index 00000000..916d24d3 --- /dev/null +++ b/frontend/static/csv/EstructuraCatTiposCambio.xls @@ -0,0 +1 @@ +FECHA (##/##/####) TIPO DE CAMBIO diff --git a/frontend/static/csv/EstructuraCatTrailers.xls b/frontend/static/csv/EstructuraCatTrailers.xls new file mode 100644 index 00000000..52f1e1d0 --- /dev/null +++ b/frontend/static/csv/EstructuraCatTrailers.xls @@ -0,0 +1 @@ +CLAVE TRAILER/CAJA NUMERO ACE TIPO DE TRAILER PRECINTO CODIGO DE ENTIDAD PLACAS ESTADO PAIS diff --git a/frontend/static/csv/EstructuraCatTransportes.xls b/frontend/static/csv/EstructuraCatTransportes.xls new file mode 100644 index 00000000..32093ebf --- /dev/null +++ b/frontend/static/csv/EstructuraCatTransportes.xls @@ -0,0 +1 @@ +CLAVE CLAVE ACE CLAVE TRANSPORTE VIN TIPO TRANSPORTE CODIGO DE ENTIDAD TRANSPONDEDOR NUMERO DOT PLACAS CIUDAD ESTADO PAIS PRECINTO EMPRESA ASEGURADORA NUM. ASEGURADORA MONTO ASEGURADO FECHA DE ASEGURADORA diff --git a/frontend/static/csv/EstructuraEncFacExpoCamReg.xls b/frontend/static/csv/EstructuraEncFacExpoCamReg.xls new file mode 100644 index 00000000..0fe4fd4c --- /dev/null +++ b/frontend/static/csv/EstructuraEncFacExpoCamReg.xls @@ -0,0 +1 @@ +PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO TIPO PESO MANIFIESTO E-DOCUMENT NUM. OPERACION ENVIADO POR ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I FACTURA ALTERNA diff --git a/frontend/static/csv/EstructuraEncFacImpoDef.xls b/frontend/static/csv/EstructuraEncFacImpoDef.xls new file mode 100644 index 00000000..2708c0ed --- /dev/null +++ b/frontend/static/csv/EstructuraEncFacImpoDef.xls @@ -0,0 +1 @@ +PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO FECHA EMISION TIPO PESO E-DOCUMENT NUM. OPERACION ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I diff --git a/frontend/static/csv/EstructuraEncFacImpoTemp.xls b/frontend/static/csv/EstructuraEncFacImpoTemp.xls new file mode 100644 index 00000000..13fcbd22 --- /dev/null +++ b/frontend/static/csv/EstructuraEncFacImpoTemp.xls @@ -0,0 +1 @@ +PEDIMENTO REMESA NUMERO FACTURA FECHA FACTURA TIPO DE CAMBIO REGIMEN CLAVE PROVEEDOR CLAVE VENDIDO A: CLAVE ENVIADO A AGENTE ADUANAL CLAVE TRANSPORTISTA NOMBRE CONDUCTOR TIPO TRANSPORTE NUMERO TRANSPORTE TIPO MONEDA CLAVE MONEDA FLETES VALOR SEGUROS SEGUROS EMBALAJES OTROS INCREMENTABLES CLAVE INCOTERM PRECINTO FECHA EMISION TIPO PESO E-DOCUMENT NUM. OPERACION ADUANA DE CRUCE OBSERVACIONES E OBSERVACIONES I FACTURA ALTERNA diff --git a/frontend/static/csv/EstructuraParExpoCamReg.xls b/frontend/static/csv/EstructuraParExpoCamReg.xls new file mode 100644 index 00000000..76bd69af --- /dev/null +++ b/frontend/static/csv/EstructuraParExpoCamReg.xls @@ -0,0 +1 @@ +NUMERO FACTURA EXPO. LINEA EXPO. TIPO DE IMPO. FACTURA IMPO. LINEA IMPO. GENERA DESCARGA CANTIDAD EXPORTADA/DESCARGAR COSTO UNITARIO PESO NETO PESO BRUTO SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) LOTE NUMERO ENTRADA ES PARTIDA/SUBPARTIDA LINEA PRINCIPAL FRACCION AMERICANA FRACCION ARANCELARIA diff --git a/frontend/static/csv/EstructuraParFacImpoDefAF.xls b/frontend/static/csv/EstructuraParFacImpoDefAF.xls new file mode 100644 index 00000000..93bcae74 --- /dev/null +++ b/frontend/static/csv/EstructuraParFacImpoDefAF.xls @@ -0,0 +1 @@ +NUMERO FACTURA LINEA CLASE CANTIDAD IMPORTADA UNIDAD DE MEDIDA COSTO UNITARIO PESO NETO PESO BRUTO CANTIDAD BULTOS CLAVE BULTOS PAIS ORIGEN FRACCION ARANCELARIA PREFERENCIA ARANCELARIA SECTOR FRACCION AMERICANA ORDEN DE COMPRA DESCRIPCION ESPAOL DESCRIPCION INGLES MARCA MODELO ES PARTIDA O SUBPARTIDA LINEA PRINCIPAL NUM. PARTE SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO METODO DE VALORACION DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) VALOR TOTAL LOTE NUMERO ENTRADA ID TYPE diff --git a/frontend/static/csv/EstructuraParFacImpoTempAF.xls b/frontend/static/csv/EstructuraParFacImpoTempAF.xls new file mode 100644 index 00000000..cc78d0b5 --- /dev/null +++ b/frontend/static/csv/EstructuraParFacImpoTempAF.xls @@ -0,0 +1 @@ +NUMERO FACTURA LINEA CLASE CANTIDAD IMPORTADA UNIDAD DE MEDIDA COSTO UNITARIO PESO NETO PESO BRUTO CANTIDAD BULTOS CLAVE BULTOS PAIS ORIGEN FRACCION ARANCELARIA PREFERENCIA ARANCELARIA SECTOR FRACCION AMERICANA ORDEN DE COMPRA DESCRIPCION ESPAOL DESCRIPCION INGLES MARCA MODELO ES PARTIDA O SUBPARTIDA LINEA PRINCIPAL NUM. PARTE SE PAGO IMPUESTO? (SI o NO) FORMA DE PAGO METODO DE VALORACION DESCRIPCION EXTRA INFORMACION ADICIONAL AGREGAR(A)/SUSTITUIR(S) TOTAL NUMERO ENTRADA LOTE ID TYPE diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 47270527..00000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,157 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - lucide-svelte: - specifier: ^0.552.0 - version: 0.552.0(svelte@5.43.2) - -packages: - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@sveltejs/acorn-typescript@1.0.6': - resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} - peerDependencies: - acorn: ^8.9.0 - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - esm-env@1.2.2: - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - - esrap@2.1.2: - resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} - - is-reference@3.0.3: - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - - lucide-svelte@0.552.0: - resolution: {integrity: sha512-zynJ64KOsuQG3I4tSqfvvl7Kc9x4mWkppbxsuyrbegQwma9HFhBp4aE6HuQNF4c3pS0AHWHki5CAMs5m3QXA5w==} - peerDependencies: - svelte: ^3 || ^4 || ^5.0.0-next.42 - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - svelte@5.43.2: - resolution: {integrity: sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==} - engines: {node: '>=18'} - - zimmerframe@1.1.4: - resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - -snapshots: - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': - dependencies: - acorn: 8.15.0 - - '@types/estree@1.0.8': {} - - acorn@8.15.0: {} - - aria-query@5.3.2: {} - - axobject-query@4.1.0: {} - - clsx@2.1.1: {} - - esm-env@1.2.2: {} - - esrap@2.1.2: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - is-reference@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - locate-character@3.0.0: {} - - lucide-svelte@0.552.0(svelte@5.43.2): - dependencies: - svelte: 5.43.2 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - svelte@5.43.2: - dependencies: - '@jridgewell/remapping': 2.3.5 - '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@types/estree': 1.0.8 - acorn: 8.15.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - clsx: 2.1.1 - esm-env: 1.2.2 - esrap: 2.1.2 - is-reference: 3.0.3 - locate-character: 3.0.0 - magic-string: 0.30.21 - zimmerframe: 1.1.4 - - zimmerframe@1.1.4: {} diff --git a/reinicio.sh b/reinicio.sh new file mode 100755 index 00000000..2ab249ca --- /dev/null +++ b/reinicio.sh @@ -0,0 +1,2 @@ +docker compose down +docker compose up --build -d diff --git a/scripts/init_first_time.sh b/scripts/init_first_time.sh index e9416f4a..1137af42 100755 --- a/scripts/init_first_time.sh +++ b/scripts/init_first_time.sh @@ -12,6 +12,11 @@ # 6. Relación usuario-tenant en tabla user_tenants # 7. Actualización del tenant_id del usuario con el valor real # 8. Licencia Enterprise para el tenant (ilimitada, 1 año de vigencia) +# 9. [OPCIONAL] Datos iniciales de ejemplo si se pasa --seed-data +# +# Uso: +# ./init_first_time.sh # Solo configuración básica +# ./init_first_time.sh --seed-data # Configuración + datos de ejemplo # # Requisitos: # - Keycloak corriendo en http://localhost:8080 @@ -28,6 +33,22 @@ set -euo pipefail # Modo strict: exit on error, undefined vars, pipe failures # Trap para cleanup en caso de error trap 'echo -e "\n${RED}✗ Error en línea $LINENO. Script abortado.${NC}" >&2' ERR +# Parsear argumentos +SEED_DATA=false +while [[ $# -gt 0 ]]; do + case $1 in + --seed-data) + SEED_DATA=true + shift + ;; + *) + echo "Uso: $0 [--seed-data]" + echo " --seed-data: Carga datos de ejemplo en las tablas" + exit 1 + ;; + esac +done + # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' @@ -112,6 +133,171 @@ create_tenant_mapper() { fi } +############################################################################### +# Funciones de seed data +############################################################################### + +# Insertar datos de ejemplo para customs_brokers +seed_customs_brokers() { + echo " → Insertando customs brokers..." + exec_pg_sql " + INSERT INTO a76.customs_brokers (tenant_id, company_id, type, broker_key, name, address, postal_code, city, state, phone, email, country, tax_id, license, company, contact, created_at, updated_at) + VALUES + (${TENANT_ID}, ${COMPANY_ID}, 'persona', 'CB001', 'Agente Aduanal García', 'Av. Reforma 123', '01000', 'Ciudad de México', 'CDMX', '5555555555', 'garcia@aduanas.com', 'MEX', 'GAAR800101ABC', '1234', 'García y Asociados', 'Juan García', now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'persona', 'CB002', 'Agente Aduanal López', 'Blvd. Díaz Ordaz 456', '22000', 'Tijuana', 'BC', '6641234567', 'lopez@customs.com', 'MEX', 'LOPL750505XYZ', '2345', 'López Customs', 'María López', now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'persona', 'CB003', 'Agente Aduanal Martínez', 'Calle Industria 789', '45000', 'Guadalajara', 'JAL', '3339876543', 'martinez@broker.com', 'MEX', 'MARM850315DEF', '3456', 'Martínez Brokerage', 'Pedro Martínez', now(), now()) + ON CONFLICT (broker_key, tenant_id, company_id) DO NOTHING; + " >/dev/null 2>&1 +} + +# Insertar datos de ejemplo para clients_and_providers +seed_clients_and_providers() { + echo " → Insertando clientes y proveedores..." + exec_pg_sql " + INSERT INTO a76.clients_and_providers (tenant_id, company_id, type_nat_foreign, name, short_name, rfc, client_or_provider, web_key, is_active, created_at, updated_at) + VALUES + (${TENANT_ID}, ${COMPANY_ID}, 'N', 'Proveedor Tecnológico SA de CV', 'PROVTECH', 'PTE901201ABC', 'BOTH', 'PROV001', true, now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'N', 'Cliente Industrial del Norte SA', 'CINORTE', 'CIN850615XYZ', 'BOTH', 'CLI001', true, now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'E', 'Global Supplies Inc', 'GLOBSUP', 'GSI123456789', 'BOTH', 'BOTH001', true, now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'N', 'Manufacturas del Bajío SA', 'MANBAJIO', 'MDB920310DEF', 'BOTH', 'CLI002', true, now(), now()) + RETURNING id; + " >/dev/null 2>&1 +} + +# Insertar datos de ejemplo para packages +seed_packages() { + echo " → Insertando tipos de paquete..." + exec_pg_sql " + INSERT INTO a76.packages (tenant_id, company_id, key, description_es, description_en, weight_unit, plurals, plural_in, code_ace, code_aamex, created_at, updated_at) + VALUES + (${TENANT_ID}, ${COMPANY_ID}, 'PK01', 'Caja de Cartón', 'Cardboard Box', 0.5, 'CAJS', 'BOXS', 'CB01', 'CAJA001', now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'PK02', 'Pallet de Madera', 'Wooden Pallet', 15.0, 'PLTS', 'PLTS', 'WP01', 'PALL001', now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'PK03', 'Tambor Metálico', 'Metal Drum', 10.0, 'TMBS', 'DRMS', 'MD01', 'TAMB001', now(), now()), + (${TENANT_ID}, ${COMPANY_ID}, 'PK04', 'Contenedor', 'Container', 2000.0, 'CONT', 'CONT', 'CT01', 'CONT001', now(), now()) + ON CONFLICT (tenant_id, company_id, key) DO NOTHING; + " >/dev/null 2>&1 +} + +# Insertar datos de ejemplo para classes +seed_classes() { + echo " → Insertando clases..." + exec_pg_sql "INSERT INTO a76.classes (tenant_id, company_id, class_code, description_es, description_en, material_key, unit_of_measure, fraction, us_fraction, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, 'CLS001', 'Componentes Electrónicos', 'Electronic Components', 'MP', 'PZA', '8542.31.01', '8542.31.0000', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, 'CLS002', 'Partes Automotrices', 'Automotive Parts', 'MP', 'KGS', '8708.29.99', '8708.29.9900', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, 'CLS003', 'Textiles y Telas', 'Textiles and Fabrics', 'MP', 'MT', '5407.20.01', '5407.20.0100', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, 'CLS004', 'Equipo de Computación', 'Computer Equipment', 'MP', 'PZA', '8471.30.01', '8471.30.0100', now(), now()) ON CONFLICT (tenant_id, company_id, class_code) DO NOTHING;" >/dev/null 2>&1 +} + +# Insertar datos de ejemplo para parts +seed_parts() { + echo " → Insertando partes/componentes..." + + # Obtener un client_id para asociar las partes + local client_id + client_id=$(exec_pg_sql "SELECT id FROM a76.clients_and_providers WHERE tenant_id = ${TENANT_ID} AND company_id = ${COMPANY_ID} LIMIT 1;" | xargs) + + if [ -n "$client_id" ]; then + exec_pg_sql "INSERT INTO a76.parts (tenant_id, company_id, client_id, part_number, description_spanish, description_english, part_class, currency_key, unit_of_measure, unit_cost, fraction, us_fraction, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${client_id}, 'PART-001', 'Microcontrolador ARM Cortex-M4', 'ARM Cortex-M4 Microcontroller', 'CLS001', 'USD', 'PZA', 15.50, '8542.31.01', '8542.31.0000', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, ${client_id}, 'PART-002', 'Filtro de Aceite Automotriz', 'Automotive Oil Filter', 'CLS002', 'USD', 'PZA', 8.75, '8421.23.01', '8421.23.0100', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, ${client_id}, 'PART-003', 'Tela de Algodón para Tapicería', 'Cotton Upholstery Fabric', 'CLS003', 'USD', 'MT', 12.00, '5208.31.01', '5208.31.0100', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, ${client_id}, 'PART-004', 'Disco Duro SSD 500GB', '500GB SSD Hard Drive', 'CLS004', 'USD', 'PZA', 65.00, '8471.70.01', '8471.70.0100', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, ${client_id}, 'PART-005', 'Sensor de Temperatura Digital', 'Digital Temperature Sensor', 'CLS001', 'USD', 'PZA', 5.25, '9025.19.01', '9025.19.0100', now(), now()) ON CONFLICT (tenant_id, company_id, part_number) DO NOTHING;" >/dev/null 2>&1 + fi +} + +# Insertar datos de ejemplo para pedimentos +seed_pedimentos() { + echo " → Insertando pedimentos..." + + # Primero obtener IDs de clientes + local client_ids + client_ids=$(exec_pg_sql "SELECT id FROM a76.clients_and_providers WHERE tenant_id = ${TENANT_ID} AND company_id = ${COMPANY_ID} AND client_or_provider IN ('CLIENT', 'BOTH') LIMIT 2;") + local client_id_1=$(echo "$client_ids" | sed -n '1p' | xargs) + local client_id_2=$(echo "$client_ids" | sed -n '2p' | xargs) + + if [ -n "$client_id_1" ]; then + exec_pg_sql "INSERT INTO a76.pedimentos (tenant_id, company_id, year, customs_office, license, pedimento_number, client_id, operation_type, pedimento_type, pedimento_code, regime, status, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, '24', '47', '3807', '8001234', ${client_id_1}, 'imp', 'normal', 'V1', 'ITE', 'draft', now(), now()), (${TENANT_ID}, ${COMPANY_ID}, '24', '47', '3807', '8001235', ${client_id_1}, 'exp', 'normal', 'V1', 'ETE', 'draft', now(), now()) ON CONFLICT (tenant_id, company_id, year, customs_office, license, pedimento_number) DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$client_id_2" ]; then + exec_pg_sql "INSERT INTO a76.pedimentos (tenant_id, company_id, year, customs_office, license, pedimento_number, client_id, operation_type, pedimento_type, pedimento_code, regime, status, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, '24', '47', '3807', '8001236', ${client_id_2}, 'imp', 'consolidated', 'V1', 'ITE', 'draft', now(), now()) ON CONFLICT (tenant_id, company_id, year, customs_office, license, pedimento_number) DO NOTHING;" >/dev/null 2>&1 + fi +} + +# Insertar datos de ejemplo para invoices +seed_invoices() { + echo " → Insertando facturas..." + + # Obtener IDs de clientes/proveedores + local provider_ids + provider_ids=$(exec_pg_sql "SELECT id FROM a76.clients_and_providers WHERE tenant_id = ${TENANT_ID} AND company_id = ${COMPANY_ID} AND client_or_provider IN ('PROVIDER', 'BOTH') LIMIT 2;") + local provider_id_1=$(echo "$provider_ids" | sed -n '1p' | xargs) + local provider_id_2=$(echo "$provider_ids" | sed -n '2p' | xargs) + + # Insertar facturas en invoice_header (mínimo requerido) + exec_pg_sql "INSERT INTO a76.invoice_header (tenant_id, company_id, system, operation_type, invoice_type, invoice_number, invoice_date, is_updated, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, 'fixed_asset', 'imp', 'DEF', 'INV-2024-001', '2024-01-10', false, now(), now()), (${TENANT_ID}, ${COMPANY_ID}, 'fixed_asset', 'exp', 'EXDEF', 'INV-2024-002', '2024-02-15', false, now(), now()), (${TENANT_ID}, ${COMPANY_ID}, 'fixed_asset', 'imp', 'TEM', 'INV-2024-003', '2024-03-05', false, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + + # Obtener IDs de las facturas recién creadas + local invoice_ids + invoice_ids=$(exec_pg_sql "SELECT id FROM a76.invoice_header WHERE tenant_id = ${TENANT_ID} AND company_id = ${COMPANY_ID} AND invoice_number IN ('INV-2024-001', 'INV-2024-002', 'INV-2024-003') ORDER BY invoice_number;") + local invoice_id_1=$(echo "$invoice_ids" | sed -n '1p' | xargs) + local invoice_id_2=$(echo "$invoice_ids" | sed -n '2p' | xargs) + local invoice_id_3=$(echo "$invoice_ids" | sed -n '3p' | xargs) + + # Insertar datos financieros para las facturas + if [ -n "$invoice_id_1" ]; then + exec_pg_sql "INSERT INTO a76.invoice_financials (tenant_id, company_id, invoice_id, currency, exchange_rate, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_1}, 'foreign', 17.50, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_2" ]; then + exec_pg_sql "INSERT INTO a76.invoice_financials (tenant_id, company_id, invoice_id, currency, exchange_rate, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_2}, 'foreign', 17.45, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_3" ]; then + exec_pg_sql "INSERT INTO a76.invoice_financials (tenant_id, company_id, invoice_id, currency, exchange_rate, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_3}, 'local', 1.00, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + # Insertar datos de compliance mexicano con proveedores + if [ -n "$invoice_id_1" ] && [ -n "$provider_id_1" ]; then + exec_pg_sql "INSERT INTO a76.invoice_compliance_mx (tenant_id, company_id, invoice_id, provider_id, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_1}, ${provider_id_1}, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_2" ] && [ -n "$provider_id_1" ]; then + exec_pg_sql "INSERT INTO a76.invoice_compliance_mx (tenant_id, company_id, invoice_id, provider_id, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_2}, ${provider_id_1}, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_3" ] && [ -n "$provider_id_2" ]; then + exec_pg_sql "INSERT INTO a76.invoice_compliance_mx (tenant_id, company_id, invoice_id, provider_id, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_3}, ${provider_id_2}, now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + # Insertar datos de logística con incoterm + if [ -n "$invoice_id_1" ]; then + exec_pg_sql "INSERT INTO a76.invoice_logistics (tenant_id, company_id, invoice_id, transport_type, weight_type, incoterm, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_1}, 'none', 'kgs', 'FOB', now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_2" ]; then + exec_pg_sql "INSERT INTO a76.invoice_logistics (tenant_id, company_id, invoice_id, transport_type, weight_type, incoterm, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_2}, 'none', 'kgs', 'CIF', now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi + + if [ -n "$invoice_id_3" ]; then + exec_pg_sql "INSERT INTO a76.invoice_logistics (tenant_id, company_id, invoice_id, transport_type, weight_type, incoterm, created_at, updated_at) VALUES (${TENANT_ID}, ${COMPANY_ID}, ${invoice_id_3}, 'none', 'kgs', 'EXW', now(), now()) ON CONFLICT DO NOTHING;" >/dev/null 2>&1 + fi +} + +# Ejecutar todas las funciones de seed +execute_seed_data() { + echo -e "\n${YELLOW}[SEED] Cargando datos de ejemplo...${NC}" + + seed_customs_brokers + seed_clients_and_providers + seed_packages + seed_classes + seed_parts + seed_pedimentos + seed_invoices + + echo -e "${GREEN}✓ Datos de ejemplo cargados exitosamente${NC}" + echo -e "${YELLOW} • 3 Agentes aduanales${NC}" + echo -e "${YELLOW} • 4 Clientes/Proveedores${NC}" + echo -e "${YELLOW} • 4 Tipos de paquete${NC}" + echo -e "${YELLOW} • 4 Clases${NC}" + echo -e "${YELLOW} • 5 Parts/Componentes${NC}" + echo -e "${YELLOW} • 3 Pedimentos${NC}" + echo -e "${YELLOW} • 3 Facturas${NC}" +} + # Variables de configuración KEYCLOAK_URL="${KEYCLOAK_URL:-http://localhost:8080/kcauth}" KEYCLOAK_ADMIN="${KEYCLOAK_ADMIN:-admin}" @@ -559,8 +745,10 @@ fi # Obtener información de la company COMPANY_INFO=$(exec_pg_sql "SELECT id, name FROM a76.company WHERE tenant_id = ${TENANT_ID} LIMIT 1;") +COMPANY_ID=$(exec_pg_sql "SELECT id FROM a76.company WHERE tenant_id = ${TENANT_ID} LIMIT 1;" | xargs) echo -e "${GREEN}✓ Company: ${COMPANY_INFO}${NC}" +echo -e "${GREEN}✓ Company ID: ${COMPANY_ID}${NC}" # Agregar tenant_id al usuario demo en Keycloak echo -e "\n${YELLOW}Asignando tenant_id al usuario demo...${NC}" @@ -635,6 +823,13 @@ else fi fi +############################################################################### +# 9. Cargar datos de ejemplo (opcional) +############################################################################### +if [ "$SEED_DATA" = true ]; then + execute_seed_data +fi + ############################################################################### # Resumen final ############################################################################### @@ -673,6 +868,18 @@ echo -e " ${GREEN}✓${NC} Plan: Enterprise (ilimitado)" echo -e " ${GREEN}✓${NC} Status: Activa" echo -e " ${GREEN}✓${NC} Features: API, Reportes Avanzados, Integraciones, Soporte Dedicado" echo -e " ${GREEN}✓${NC} Vigencia: 1 año" + +if [ "$SEED_DATA" = true ]; then +echo -e "\n${YELLOW}Datos de ejemplo:${NC}" +echo -e " ${GREEN}✓${NC} Agentes aduanales: 3" +echo -e " ${GREEN}✓${NC} Clientes/Proveedores: 4" +echo -e " ${GREEN}✓${NC} Tipos de paquete: 4" +echo -e " ${GREEN}✓${NC} Clases: 4" +echo -e " ${GREEN}✓${NC} Parts/Componentes: 5" +echo -e " ${GREEN}✓${NC} Pedimentos: 3" +echo -e " ${GREEN}✓${NC} Facturas: 3" +fi + echo -e "\n${YELLOW}Puedes acceder al sistema en:${NC}" echo -e " ${GREEN}http://localhost:5173${NC}" echo -e "\n${GREEN}════════════════════════════════════════════════════════${NC}\n" From d6ab2f47d76a02f7a2af47f841cacb95e5931312 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Wed, 25 Feb 2026 09:47:13 -0600 Subject: [PATCH 37/54] feat: Improve pedimento form logic by adding `untrack` to focus effect and refining conditional filtering for regimen and operation type. --- .../edit/contributions-tab-form.svelte | 160 ++-- .../pedimentos/edit/general-tab-form.svelte | 822 +++++++++--------- .../edit/other-data-tab-form.svelte | 16 +- .../pedimentos/edit/[id]/+page.svelte | 16 +- 4 files changed, 522 insertions(+), 492 deletions(-) diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte index d14f69f6..61c3c86b 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte @@ -1,4 +1,5 @@ - +
-
+
{#if activeTab === 'DTA'}
@@ -397,7 +405,7 @@
{:else if activeTab === 'PREV'} -
+
-
+
@@ -497,7 +505,7 @@ {#if !formData?.contribuciones || formData.contribuciones.length === 0} - + No hay contribuciones registradas @@ -555,7 +563,7 @@ onCheckedChange={(checked: boolean | 'indeterminate') => formData && (formData.calculo_manual = checked === true)} /> - @@ -567,7 +575,7 @@ onCheckedChange={(checked: boolean | 'indeterminate') => formData && (formData.operaciones_regla_31_40 = checked === true)} /> - @@ -609,7 +617,7 @@ - + {editingIndex !== null ? 'Editar Contribución' : 'Insertando'} @@ -619,8 +627,8 @@
-

Tasas Pedimento - Registro 509

- +

Tasas Pedimento - Registro 509

+
{currentContribucion.tipo_tasa || 'Seleccionar'} - Porcentual - Específico - Cuota minima (DTA) - Cuota fija (DTA) - Tasa de descuento sobre ad valorem - Factor de aplicación sobre tigie. - Al millar (DTA) - Tasa de descuento sobre el arancel específico - Tasa especifica sobre precios de referencia - Tasa especifica sobre precios de referencia con UM - - - + Porcentual + Específico + Cuota minima (DTA) + Cuota fija (DTA) + Tasa de descuento sobre ad valorem + Factor de aplicación sobre tigie. + Al millar (DTA) + Tasa de descuento sobre el arancel específico + Tasa especifica sobre precios de referencia + Tasa especifica sobre precios de referencia con UM + + + +
+
+ +
+ +
-
- - -
- + +
+

Contribuciones Generales - Registro 510

- -
-

Contribuciones Generales - Registro 510

- -
+
@@ -696,7 +714,7 @@ placeholder="0.00000" {#if !currentContribucion.contribuciones_generales || currentContribucion.contribuciones_generales.length === 0} - + Sin registros @@ -704,9 +722,9 @@ placeholder="0.00000" {#each currentContribucion.contribuciones_generales as contribGen, index} {contribGen.clave_contribucion} - {contribGen.clave_forma_pago} - - {contribGen.importe_contribucion.toLocaleString('es-MX', { + {contribGen.clave_forma_pago} + + {contribGen.importe_contribucion.toLocaleString('es-MX', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} @@ -720,13 +738,13 @@ placeholder="0.00000"
@@ -767,11 +785,7 @@ placeholder="0.00000"
- +
diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte index adf9f65b..2ecf6562 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte @@ -1,5 +1,5 @@ @@ -381,18 +413,18 @@
Información General - - Edita los datos principales del pedimento - + Edita los datos principales del pedimento
- + -
+
{formData.fecha_captura}
-
+
{formData.hora_captura} @@ -401,8 +433,10 @@
-
-
+
+
@@ -418,22 +452,22 @@
- +
- formData.customs_office = v ?? ''} + onValueChange={(v: string) => (formData.customs_office = v ?? '')} > {formData.customs_office ? formData.customs_office.substring(0, 2) : 'Sel...'} - + {#if customsSections.length === 0}
No hay aduanas disponibles @@ -441,7 +475,10 @@ {:else} {#each customsSections as section} - + {section.customs_code} - {section.section_name} @@ -452,23 +489,23 @@
- +
- formData.license = v || null} + onValueChange={(v: string | undefined) => (formData.license = v || null)} > {formData.license || 'Sel...'} - - {@const validBrokers = customsBrokers.filter(b => b.license)} + + {@const validBrokers = customsBrokers.filter((b) => b.license)} {#if customsBrokers.length === 0}
No hay agentes aduanales registrados @@ -481,7 +518,10 @@ {#each validBrokers as broker} {@const displayName = broker.name || broker.broker_key || ''} - + {displayName ? `${displayName} - ${broker.license}` : broker.license} @@ -492,11 +532,13 @@
- +
- +
-
+
- formData.pedimento_code = v ?? ''} + onValueChange={(v: string) => (formData.pedimento_code = v ?? '')} > - {pedimentoCodes.find(o => o.code === formData.pedimento_code)?.code || 'Sel...'} + {pedimentoCodes.find((o) => o.code === formData.pedimento_code)?.code || 'Sel...'} - + {#each pedimentoCodes as code}
@@ -552,13 +594,14 @@
- formData.operation_type = v || null} + onValueChange={(v: string) => (formData.operation_type = v || null)} > - {operationOptions.find(o => o.value === formData.operation_type)?.label || 'Seleccionar...'} + {operationOptions.find((o) => o.value === formData.operation_type)?.label || + 'Seleccionar...'} {#each filteredOperationTypes as option} @@ -571,11 +614,11 @@
- {#if hasMultipleRegimens} - formData.regime = v ?? ''} + onValueChange={(v: string) => (formData.regime = v ?? '')} > @@ -583,9 +626,12 @@ - {#each filteredRegimens as regimen} + {#each filteredRegimens as regimen} - + {regimen.code} @@ -605,18 +651,18 @@
-
+
- formData.client_id = v ? Number(v) : null} + onValueChange={(v: string) => (formData.client_id = v ? Number(v) : null)} > - {clients.find(c => c.id === formData.client_id)?.name || 'Seleccionar cliente...'} + {clients.find((c) => c.id === formData.client_id)?.name || 'Seleccionar cliente...'} @@ -627,7 +673,10 @@ {:else} {#each clients as client} - + {client.name} @@ -640,13 +689,14 @@
- formData.pedimento_type = v ?? ''} + onValueChange={(v: string) => (formData.pedimento_type = v ?? '')} > - {pedimentoTypeOptions.find(o => o.value === formData.pedimento_type)?.label || 'Seleccionar...'} + {pedimentoTypeOptions.find((o) => o.value === formData.pedimento_type)?.label || + 'Seleccionar...'} {#each pedimentoTypeOptions as option} @@ -655,12 +705,9 @@
-
- - -
+
@@ -700,145 +747,112 @@
- +
- +
- -
+ +
-
-
- - - - - - + + + + + + +
-
{#if activeSection === 'fechas'} -
+
- +
{#if formData.pedimento_type === 'consolidated'}
- +
{/if}
- +
- +
- +
{#if formData.pedimento_code === 'R1'} @@ -856,125 +870,118 @@
- -
+ +
{:else if activeSection === 'incrementables'}
-
- Factor: 1.00000 -
+
Factor: 1.00000
-
- -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- +
+
-
- - -
-
- - + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + +
+
+ + +
-
{:else if activeSection === 'identificadores'} {:else if activeSection === 'indices'} -
+
- formData.tipo_factor = v ?? ''} + onValueChange={(v: string) => (formData.tipo_factor = v ?? '')} > - {formData.tipo_factor === 'INPC' ? 'I.N.P.C' : formData.tipo_factor === 'variacion_cambiaria' ? 'Variación Cambiaria' : 'Seleccionar'} + {formData.tipo_factor === 'INPC' + ? 'I.N.P.C' + : formData.tipo_factor === 'variacion_cambiaria' + ? 'Variación Cambiaria' + : 'Seleccionar'} @@ -998,7 +1005,7 @@
-
+
{:else if activeSection === 'adicional'} -
+
@@ -1023,14 +1030,14 @@ bind:value={formData.anio_impresion} placeholder="25" maxlength={2} - class="text-center w-40 focus-visible:ring-0 focus-visible:ring-offset-0" + class="w-40 text-center focus-visible:ring-0 focus-visible:ring-offset-0" />
-
+
-
+
-
+
-
+
-
+
-
+
-
- Factor: 0.05000 -
+
Factor: 0.05000
-
- -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- -
- + +
+ + -
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ + +
@@ -1220,9 +1210,11 @@ - {/* Optional: maybe refresh something or just let user continue */}} + onSuccess={() => { + /* Optional: maybe refresh something or just let user continue */ + }} /> diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte index 1682fadb..340f0d4b 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte @@ -1,4 +1,5 @@ - + - {isEditing ? "Editar Factura" : "Nueva Factura"} + {isEditing ? 'Editar Factura' : 'Nueva Factura'} - {isEditing - ? "Modifica los datos de la factura" - : "Ingresa los datos de la nueva factura"} + {isEditing ? 'Modifica los datos de la factura' : 'Ingresa los datos de la nueva factura'} @@ -397,24 +406,29 @@
-
- - { - if (v) formData.operation_type = v as "imp" | "exp"; - }} - > - - {formData.operation_type === 'imp' ? 'Importación' : formData.operation_type === 'exp' ? 'Exportación' : 'Seleccionar tipo'} - - - Importación - Exportación - - -
+
+ + { + if (v) formData.operation_type = v as 'imp' | 'exp'; + }} + > + + {formData.operation_type === 'imp' + ? 'Importación' + : formData.operation_type === 'exp' + ? 'Exportación' + : 'Seleccionar tipo'} + + + Importación + Exportación + + +
+
- +
@@ -470,11 +480,7 @@
- +
@@ -514,11 +520,7 @@
- +
@@ -548,7 +550,7 @@ />
-
+
- +
@@ -696,34 +694,31 @@ {#if error} -
+
{error}
{/if} - - {/* Optional: maybe refresh something or just let user continue */}} + onSuccess={() => { + /* Optional: maybe refresh something or just let user continue */ + }} /> diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte index adf9f65b..c5a4886a 100644 --- a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte +++ b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte @@ -15,8 +15,8 @@ import IdentificadoresTabForm from './identifiers-tab-form.svelte'; import ExchangeRateDialog from '$lib/components/dashboard/exchange_rate/create-edit-dialog.svelte'; import { Calendar, Clock } from 'lucide-svelte'; - import { - loadServerDate, + import { + loadServerDate, addDaysLocal, getCurrentLocalYear, getCurrentLocalDate, @@ -27,7 +27,7 @@ import { shortcutStore } from '$lib/stores/shortcut-store'; import { focusStore, interactionMode } from '$lib/stores/focus-store'; - let { + let { pedimento, formData = $bindable(), identificadoresFormData = $bindable(), @@ -37,7 +37,7 @@ clients = [], codePedimentoRegimens = [], isActive = false - }: { + }: { pedimento: Pedimento | null; formData?: any; identificadoresFormData?: any; @@ -77,13 +77,19 @@ // Exchange Rate Check State let showExchangeRateDialog = $state(false); - let missingExchangeRateDate = $state(""); + let missingExchangeRateDate = $state(''); // Extraer regímenes únicos de codePedimentoRegimens const uniqueRegimens = $derived( - Array.from(new Set(codePedimentoRegimens.map(r => r.regimen_code).filter((code): code is string => code !== null))) + Array.from( + new Set( + codePedimentoRegimens + .map((r) => r.regimen_code) + .filter((code): code is string => code !== null) + ) + ) .sort() - .map(code => ({ code, label: code })) + .map((code) => ({ code, label: code })) ); // Funciones de mapeo entre type_code (E/I) y operation_type (exp/imp) @@ -106,7 +112,7 @@ // Opciones constantes const operationOptions = [ { value: 'exp', label: 'Exportación' }, - { value: 'imp', label: 'Importación' }, + { value: 'imp', label: 'Importación' } ]; // Track previous values to detect changes @@ -115,22 +121,30 @@ // Opciones filtradas para Régimen y Tipo de Operación basadas en las selecciones actuales // NOTA: La Clave NO se filtra, siempre muestra todas las opciones - + const filteredRegimens = $derived.by(() => { if (!formData) return uniqueRegimens; - + // Si hay clave o tipo de operación seleccionado, filtrar - if (formData.pedimento_code || formData.operation_type !== null && formData.operation_type !== undefined) { + if ( + formData.pedimento_code || + (formData.operation_type !== null && formData.operation_type !== undefined) + ) { const expectedTypeCode = operationTypeToTypeCode(formData.operation_type); - - const matches = codePedimentoRegimens.filter(r => { - const matchesCode = !formData.pedimento_code || r.pedimento_code === formData.pedimento_code; + + const matches = codePedimentoRegimens.filter((r) => { + const matchesCode = + !formData.pedimento_code || r.pedimento_code === formData.pedimento_code; const matchesType = !expectedTypeCode || r.type_code === expectedTypeCode; return matchesCode && matchesType; }); - - const validRegimens = new Set(matches.map(m => m.regimen_code).filter((code): code is string => code !== null)); - return Array.from(validRegimens).sort().map(code => ({ code, label: code })); + + const validRegimens = new Set( + matches.map((m) => m.regimen_code).filter((code): code is string => code !== null) + ); + return Array.from(validRegimens) + .sort() + .map((code) => ({ code, label: code })); } return uniqueRegimens; }); @@ -146,9 +160,13 @@ // Solo filtrar por la clave del pedimento (no por régimen) // Esto permite cambiar entre Exportación e Importación libremente if (formData.pedimento_code) { - const matches = codePedimentoRegimens.filter(r => r.pedimento_code === formData.pedimento_code); - const validTypes = new Set(matches.map(m => typeCodeToOperationType(m.type_code)).filter(t => t !== null)); - return operationOptions.filter(opt => validTypes.has(opt.value)); + const matches = codePedimentoRegimens.filter( + (r) => r.pedimento_code === formData.pedimento_code + ); + const validTypes = new Set( + matches.map((m) => typeCodeToOperationType(m.type_code)).filter((t) => t !== null) + ); + return operationOptions.filter((opt) => validTypes.has(opt.value)); } return operationOptions; }); @@ -156,30 +174,30 @@ // Reactive synchronization between Clave, Régimen, and Tipo de Operación // REGLA: La Clave es el campo principal y NUNCA se modifica automáticamente // Solo se auto-llenan Régimen y Tipo de Operación basándose en la Clave - + // Cuando cambia la Clave del Pedimento $effect(() => { if (!formData) return; - + const currentCode = formData.pedimento_code; - + // Detectar si la clave cambió const codeChanged = currentCode !== previousPedimentoCode; - + // Solo procesar si la clave cambió if (!codeChanged) return; - + // Actualizar el tracking previousPedimentoCode = currentCode; - - if (!currentCode) return; - - const matches = codePedimentoRegimens.filter(r => r.pedimento_code === currentCode); - + + if (!currentCode) return; + + const matches = codePedimentoRegimens.filter((r) => r.pedimento_code === currentCode); + if (matches.length === 0) return; - + // Auto-llenar con el primer match - const firstMatch = matches[0]; + const firstMatch = matches[0]; if (firstMatch.regimen_code) { formData.regime = firstMatch.regimen_code; } @@ -192,17 +210,17 @@ // Cuando cambia el Régimen $effect(() => { if (!formData) return; - + const currentRegime = formData.regime; - if (!currentRegime) return; - - const matches = codePedimentoRegimens.filter(r => r.regimen_code === currentRegime); - + if (!currentRegime) return; + + const matches = codePedimentoRegimens.filter((r) => r.regimen_code === currentRegime); + if (matches.length === 0) return; - + // Si hay clave seleccionada, solo validar (NO auto-llenar tipo de operación) if (formData.pedimento_code) { - const exactMatch = matches.find(m => m.pedimento_code === formData.pedimento_code); + const exactMatch = matches.find((m) => m.pedimento_code === formData.pedimento_code); } // Si hay tipo de operación pero no clave, no hacer nada // (el usuario debe seleccionar la clave primero) @@ -212,32 +230,33 @@ // Optimizado: solo ejecutar cuando cambien los campos específicos relevantes $effect(() => { if (!formData) return; - + // Solo rastrear los campos que realmente importan const currentType = formData.operation_type; const currentCode = formData.pedimento_code; const currentRegime = formData.regime; - + // Detectar si el tipo de operación cambió const typeChanged = currentType !== previousOperationType; previousOperationType = currentType; - + // Si no hay clave seleccionada o tipo no definido, salir temprano if (!currentCode || currentType === null || currentType === undefined) return; - + const expectedTypeCode = operationTypeToTypeCode(currentType); - + // Buscar matches para esta combinación de clave + tipo de operación - const matches = codePedimentoRegimens.filter(r => - r.pedimento_code === currentCode && - r.type_code === expectedTypeCode + const matches = codePedimentoRegimens.filter( + (r) => r.pedimento_code === currentCode && r.type_code === expectedTypeCode ); - + if (matches.length === 0) return; - + // Obtener regímenes válidos para esta combinación - const validRegimens = new Set(matches.map(m => m.regimen_code).filter((code): code is string => code !== null)); - + const validRegimens = new Set( + matches.map((m) => m.regimen_code).filter((code): code is string => code !== null) + ); + // Si el tipo de operación cambió O el régimen actual no es válido, actualizar el régimen if (typeChanged || !currentRegime || !validRegimens.has(currentRegime)) { const firstMatch = matches[0]; @@ -255,7 +274,6 @@ const end_date = addDaysLocal(currentDate, 4); const payment_date = addDaysLocal(end_date, 2); - // Inicializar formData con los valores del pedimento (o vacío si es null) if (!formData) { const datesData = pedimento?.pedimento_dates; @@ -263,7 +281,7 @@ const decrementablesData = pedimento?.pedimento_decrementables; const indexesData = pedimento?.pedimento_indexes; const configAdditionalData = pedimento?.pedimento_config_additional; - + formData = { year: pedimento?.year || currentYear, customs_office: pedimento?.customs_office || '', @@ -282,11 +300,11 @@ // Date fields - Cargamos convirtiendo a local para el usuario entry_date: loadServerDate(datesData?.entry_date) || currentDate, end_date: loadServerDate(datesData?.end_date) || end_date, - payment_date: loadServerDate(datesData?.payment_date) || payment_date, + payment_date: loadServerDate(datesData?.payment_date) || payment_date, pedimento_date: loadServerDate(datesData?.pedimento_date), extraction_date: loadServerDate(datesData?.extraction_date), rectification_payment_date: loadServerDate(datesData?.rectification_payment_date), - original_date: loadServerDate(datesData?.original_date), + original_date: loadServerDate(datesData?.original_date), // Campos de captura automática (Local) fecha_captura: currentDate, hora_captura: currentTime @@ -312,26 +330,29 @@ $effect(() => { const entryDate = formData?.entry_date; const companyId = companyStore.activeCompany?.id; - + // Solo ejecutar si los valores clave cambiaron - if (formData && entryDate && companyId && - (entryDate !== lastFetchedDate || companyId !== lastCompanyId)) { - + if ( + formData && + entryDate && + companyId && + (entryDate !== lastFetchedDate || companyId !== lastCompanyId) + ) { lastFetchedDate = entryDate; - lastCompanyId = companyId; - + lastCompanyId = companyId; + getExchangeRateByDate(entryDate, companyId) - .then(usdRate => { + .then((usdRate) => { if (usdRate && formData) { - formData.exchange_rate = usdRate.value; + formData.exchange_rate = usdRate.value; } else { console.warn('⚠️ [TIPO CAMBIO] No encontrado para fecha:', entryDate); } }) - .catch(err => { + .catch((err) => { console.error('❌ [TIPO CAMBIO] Error:', err); }); - } + } }); const pedimentoTypeOptions = [ @@ -351,11 +372,11 @@ export async function checkPaymentDateRate(date: string): Promise { if (!date || !companyStore.activeCompany?.id) return true; - + try { const rate = await getExchangeRateByDate(date, companyStore.activeCompany.id); if (!rate) { - // Abrir modal preventivamente + // Abrir modal preventivamente missingExchangeRateDate = date; showExchangeRateDialog = true; return false; @@ -363,17 +384,17 @@ return true; } catch (error) { console.error('Error checking payment date rate:', error); - // Si hay error de red, asumimos que falta para forzar reintento/captura segura - missingExchangeRateDate = date; - showExchangeRateDialog = true; + // Si hay error de red, asumimos que falta para forzar reintento/captura segura + missingExchangeRateDate = date; + showExchangeRateDialog = true; return false; } } - export function openExchangeRateDialog(date: string) { - missingExchangeRateDate = date; - showExchangeRateDialog = true; - } + export function openExchangeRateDialog(date: string) { + missingExchangeRateDate = date; + showExchangeRateDialog = true; + } @@ -381,18 +402,18 @@
Información General - - Edita los datos principales del pedimento - + Edita los datos principales del pedimento
- + -
+
{formData.fecha_captura}
-
+
{formData.hora_captura} @@ -401,8 +422,10 @@
-
-
+
+
@@ -418,22 +441,22 @@
- +
- formData.customs_office = v ?? ''} + onValueChange={(v: string) => (formData.customs_office = v ?? '')} > {formData.customs_office ? formData.customs_office.substring(0, 2) : 'Sel...'} - + {#if customsSections.length === 0}
No hay aduanas disponibles @@ -441,7 +464,10 @@ {:else} {#each customsSections as section} - + {section.customs_code} - {section.section_name} @@ -452,23 +478,23 @@
- +
- formData.license = v || null} + onValueChange={(v: string | undefined) => (formData.license = v || null)} > {formData.license || 'Sel...'} - - {@const validBrokers = customsBrokers.filter(b => b.license)} + + {@const validBrokers = customsBrokers.filter((b) => b.license)} {#if customsBrokers.length === 0}
No hay agentes aduanales registrados @@ -481,7 +507,10 @@ {#each validBrokers as broker} {@const displayName = broker.name || broker.broker_key || ''} - + {displayName ? `${displayName} - ${broker.license}` : broker.license} @@ -492,11 +521,13 @@
- +
- +
-
+
- formData.pedimento_code = v ?? ''} + onValueChange={(v: string) => (formData.pedimento_code = v ?? '')} > - {pedimentoCodes.find(o => o.code === formData.pedimento_code)?.code || 'Sel...'} + {pedimentoCodes.find((o) => o.code === formData.pedimento_code)?.code || 'Sel...'} - + {#each pedimentoCodes as code}
@@ -552,13 +583,14 @@
- formData.operation_type = v || null} + onValueChange={(v: string) => (formData.operation_type = v || null)} > - {operationOptions.find(o => o.value === formData.operation_type)?.label || 'Seleccionar...'} + {operationOptions.find((o) => o.value === formData.operation_type)?.label || + 'Seleccionar...'} {#each filteredOperationTypes as option} @@ -571,11 +603,11 @@
- {#if hasMultipleRegimens} - formData.regime = v ?? ''} + onValueChange={(v: string) => (formData.regime = v ?? '')} > @@ -583,9 +615,12 @@ - {#each filteredRegimens as regimen} + {#each filteredRegimens as regimen} - + {regimen.code} @@ -605,18 +640,18 @@
-
+
- formData.client_id = v ? Number(v) : null} + onValueChange={(v: string) => (formData.client_id = v ? Number(v) : null)} > - {clients.find(c => c.id === formData.client_id)?.name || 'Seleccionar cliente...'} + {clients.find((c) => c.id === formData.client_id)?.name || 'Seleccionar cliente...'} @@ -627,7 +662,10 @@ {:else} {#each clients as client} - + {client.name} @@ -640,13 +678,14 @@
- formData.pedimento_type = v ?? ''} + onValueChange={(v: string) => (formData.pedimento_type = v ?? '')} > - {pedimentoTypeOptions.find(o => o.value === formData.pedimento_type)?.label || 'Seleccionar...'} + {pedimentoTypeOptions.find((o) => o.value === formData.pedimento_type)?.label || + 'Seleccionar...'} {#each pedimentoTypeOptions as option} @@ -655,12 +694,9 @@
-
- - -
+
@@ -700,145 +736,112 @@
- +
- +
- -
+ +
-
-
- - - - - - + + + + + + +
-
{#if activeSection === 'fechas'} -
+
- +
{#if formData.pedimento_type === 'consolidated'}
- +
{/if}
- +
- +
- +
{#if formData.pedimento_code === 'R1'} @@ -856,125 +859,118 @@
- -
+ +
{:else if activeSection === 'incrementables'}
-
- Factor: 1.00000 -
+
Factor: 1.00000
-
- -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- +
+
-
- - -
-
- - + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + +
+
+ + +
-
{:else if activeSection === 'identificadores'} {:else if activeSection === 'indices'} -
+
- formData.tipo_factor = v ?? ''} + onValueChange={(v: string) => (formData.tipo_factor = v ?? '')} > - {formData.tipo_factor === 'INPC' ? 'I.N.P.C' : formData.tipo_factor === 'variacion_cambiaria' ? 'Variación Cambiaria' : 'Seleccionar'} + {formData.tipo_factor === 'INPC' + ? 'I.N.P.C' + : formData.tipo_factor === 'variacion_cambiaria' + ? 'Variación Cambiaria' + : 'Seleccionar'} @@ -998,7 +994,7 @@
-
+
{:else if activeSection === 'adicional'} -
+
@@ -1023,14 +1019,14 @@ bind:value={formData.anio_impresion} placeholder="25" maxlength={2} - class="text-center w-40 focus-visible:ring-0 focus-visible:ring-offset-0" + class="w-40 text-center focus-visible:ring-0 focus-visible:ring-offset-0" />
-
+
-
+
-
+
-
+
-
+
-
+
-
- Factor: 0.05000 -
+
Factor: 0.05000
-
- -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- - -
- -
- + +
+ + -
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ + +
@@ -1220,9 +1199,11 @@ - {/* Optional: maybe refresh something or just let user continue */}} + onSuccess={() => { + /* Optional: maybe refresh something or just let user continue */ + }} /> diff --git a/frontend/src/routes/dashboard/+layout.svelte b/frontend/src/routes/dashboard/+layout.svelte index 44acac62..adc8e934 100644 --- a/frontend/src/routes/dashboard/+layout.svelte +++ b/frontend/src/routes/dashboard/+layout.svelte @@ -8,6 +8,7 @@ import * as Sidebar from '$lib/components/ui/sidebar/index.js'; import { companyStore } from '$lib/stores/company.svelte'; import ExchangeRateGuard from '$lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte'; + import { page } from '$app/state'; let { data, children }: { data: LayoutData; children: any } = $props(); @@ -63,4 +64,6 @@ - +{#if !page.url.pathname.includes('/dashboard/invoices') && !page.url.pathname.includes('/dashboard/pedimentos')} + +{/if} From 6adf2e1968b358f503f1aca54e928831707fecf0 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 26 Feb 2026 11:11:07 -0600 Subject: [PATCH 44/54] Corrigiendo formeto y botoncito de consultar --- .../exchange_rate/create-edit-dialog.svelte | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/frontend/src/lib/components/dashboard/exchange_rate/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/exchange_rate/create-edit-dialog.svelte index ded462ce..f19312c0 100644 --- a/frontend/src/lib/components/dashboard/exchange_rate/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/exchange_rate/create-edit-dialog.svelte @@ -166,7 +166,7 @@
-

+

{title}

@@ -232,7 +232,7 @@ /> {#if isMissingRateContext}

Requerida
@@ -241,28 +241,12 @@
-
- - -
+
$
@@ -270,6 +254,7 @@ id="value" type="number" step="0.0001" + lang="en" bind:value={formData.value} disabled={loading} required @@ -278,18 +263,30 @@ autofocus />
-

Ej. 24.1234

+
+ +

Ej. 24.1234

+
- - - + + + + + + diff --git a/frontend/src/lib/components/dashboard/transportation/trailers/data-table-actions.svelte b/frontend/src/lib/components/dashboard/transportation/trailers/data-table-actions.svelte new file mode 100644 index 00000000..6dce1ab9 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/trailers/data-table-actions.svelte @@ -0,0 +1,111 @@ + + + + + {#snippet child({ props })} + + {/snippet} + + + Acciones + + + + Editar + + + + {#if loading} + + {:else} + + {/if} + Eliminar + + + + + diff --git a/frontend/src/lib/components/dashboard/transportation/trailers/data-table.svelte b/frontend/src/lib/components/dashboard/transportation/trailers/data-table.svelte new file mode 100644 index 00000000..e0cdf7c1 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/trailers/data-table.svelte @@ -0,0 +1,99 @@ + + +
+ + + {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} + + {#each headerGroup.headers as header (header.id)} + + {#if !header.isPlaceholder} + + {/if} + + {/each} + + {/each} + + + {#each table.getRowModel().rows as row (row.id)} + + {#each row.getVisibleCells() as cell (cell.id)} + + + + {/each} + + {:else} + + + No hay resultados. + + + {/each} + + +
+ +
+
+ Total: {totalItems} +
+
+ + +
+
diff --git a/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte new file mode 100644 index 00000000..0cc296fd --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/transporters/create-edit-dialog.svelte @@ -0,0 +1,306 @@ + + + + + + {title} + + {isEdit + ? 'Modifica los datos del transportista' + : 'Completa los datos para crear un nuevo transportista'} + + + +
{ + e.preventDefault(); + handleSubmit(); + }} + class="space-y-6" + > + {#if error} +
+ {error} +
+ {/if} + +
+ +
+

Información General

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+

Códigos de Transporte

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+

Dirección

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+ + +
+

Configuración FTP

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ + + + + + +
+
diff --git a/frontend/src/lib/components/dashboard/transportation/transporters/data-table-actions.svelte b/frontend/src/lib/components/dashboard/transportation/transporters/data-table-actions.svelte new file mode 100644 index 00000000..8715b474 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/transporters/data-table-actions.svelte @@ -0,0 +1,114 @@ + + + + + {#snippet child({ props })} + + {/snippet} + + + Acciones + + + + Editar + + + + {#if loading} + + {:else} + + {/if} + Eliminar + + + + + diff --git a/frontend/src/lib/components/dashboard/transportation/transporters/data-table.svelte b/frontend/src/lib/components/dashboard/transportation/transporters/data-table.svelte new file mode 100644 index 00000000..e0cdf7c1 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/transporters/data-table.svelte @@ -0,0 +1,99 @@ + + +
+ + + {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} + + {#each headerGroup.headers as header (header.id)} + + {#if !header.isPlaceholder} + + {/if} + + {/each} + + {/each} + + + {#each table.getRowModel().rows as row (row.id)} + + {#each row.getVisibleCells() as cell (cell.id)} + + + + {/each} + + {:else} + + + No hay resultados. + + + {/each} + + +
+ +
+
+ Total: {totalItems} +
+
+ + +
+
diff --git a/frontend/src/lib/components/dashboard/transportation/transporters/transporter-columns.ts b/frontend/src/lib/components/dashboard/transportation/transporters/transporter-columns.ts new file mode 100644 index 00000000..32e69333 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/transporters/transporter-columns.ts @@ -0,0 +1,64 @@ +/** + * Definición de columnas para la tabla de Transportistas + */ +import type { Transporter } from '$lib/api/dashboard/a76/transporters'; +import type { ColumnDef } from '@tanstack/table-core'; +import { renderComponent } from '$lib/components/ui/data-table'; +import DataTableActions from './data-table-actions.svelte'; + +export function createColumns(onSuccess?: () => void): ColumnDef[] { + return [ + { + accessorKey: 'transporter_key', + header: 'Clave', + cell: ({ row }) => { + return row.original.transporter_key; + } + }, + { + accessorKey: 'name', + header: 'Nombre', + cell: ({ row }) => { + return row.original.name || '-'; + } + }, + { + accessorKey: 'short_name', + header: 'Nombre Corto', + cell: ({ row }) => { + return row.original.short_name || '-'; + } + }, + { + accessorKey: 'rfc', + header: 'RFC', + cell: ({ row }) => { + return row.original.rfc || '-'; + } + }, + { + accessorKey: 'caat_code', + header: 'CAAT', + cell: ({ row }) => { + return row.original.caat_code || '-'; + } + }, + { + accessorKey: 'transport_code', + header: 'Código Transporte', + cell: ({ row }) => { + return row.original.transport_code || '-'; + } + }, + { + id: 'actions', + header: 'Acciones', + cell: ({ row }) => { + return renderComponent(DataTableActions, { + item: row.original, + onSuccess + }); + } + } + ]; +} diff --git a/frontend/src/lib/components/dashboard/transportation/vehicles/columns.ts b/frontend/src/lib/components/dashboard/transportation/vehicles/columns.ts new file mode 100644 index 00000000..2bacea83 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/vehicles/columns.ts @@ -0,0 +1,64 @@ +/** + * Definición de columnas para la tabla de Vehículos + */ +import type { Vehicle } from '$lib/api/dashboard/a76/vehicles'; +import type { ColumnDef } from '@tanstack/table-core'; +import { renderComponent } from '$lib/components/ui/data-table'; +import DataTableActions from './data-table-actions.svelte'; + +export function createColumns(onSuccess?: () => void): ColumnDef[] { + return [ + { + accessorKey: 'vehicle_key', + header: 'Clave', + cell: ({ row }) => { + return row.original.vehicle_key; + } + }, + { + accessorKey: 'brand', + header: 'Marca', + cell: ({ row }) => { + return row.original.brand || '-'; + } + }, + { + accessorKey: 'year', + header: 'Año', + cell: ({ row }) => { + return row.original.year || '-'; + } + }, + { + accessorKey: 'plate_number', + header: 'Placas', + cell: ({ row }) => { + return row.original.plate_number || '-'; + } + }, + { + accessorKey: 'transporter_key', + header: 'Transportista', + cell: ({ row }) => { + return row.original.transporter_key || '-'; + } + }, + { + accessorKey: 'transport_type', + header: 'Tipo Transporte', + cell: ({ row }) => { + return row.original.transport_type || '-'; + } + }, + { + id: 'actions', + header: 'Acciones', + cell: ({ row }) => { + return renderComponent(DataTableActions, { + item: row.original, + onSuccess + }); + } + } + ]; +} diff --git a/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte new file mode 100644 index 00000000..313dd45b --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/vehicles/create-edit-dialog.svelte @@ -0,0 +1,317 @@ + + + + + + {title} + + {isEdit + ? 'Modifica los datos del vehículo' + : 'Completa los datos para crear un nuevo vehículo de transporte'} + + + +
{ + e.preventDefault(); + handleSubmit(); + }} + class="space-y-6" + > + {#if error} +
+ {error} +
+ {/if} + +
+ +
+

Identificación del Vehículo

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+
+ + +
+

Datos de Transporte

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+

Seguro y Otros

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+ + +
+

Ubicación y Detalles

+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+
+
+ + + + + + +
+
diff --git a/frontend/src/lib/components/dashboard/transportation/vehicles/data-table-actions.svelte b/frontend/src/lib/components/dashboard/transportation/vehicles/data-table-actions.svelte new file mode 100644 index 00000000..9ec4eb00 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/vehicles/data-table-actions.svelte @@ -0,0 +1,111 @@ + + + + + {#snippet child({ props })} + + {/snippet} + + + Acciones + + + + Editar + + + + {#if loading} + + {:else} + + {/if} + Eliminar + + + + + diff --git a/frontend/src/lib/components/dashboard/transportation/vehicles/data-table.svelte b/frontend/src/lib/components/dashboard/transportation/vehicles/data-table.svelte new file mode 100644 index 00000000..e0cdf7c1 --- /dev/null +++ b/frontend/src/lib/components/dashboard/transportation/vehicles/data-table.svelte @@ -0,0 +1,99 @@ + + +
+ + + {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} + + {#each headerGroup.headers as header (header.id)} + + {#if !header.isPlaceholder} + + {/if} + + {/each} + + {/each} + + + {#each table.getRowModel().rows as row (row.id)} + + {#each row.getVisibleCells() as cell (cell.id)} + + + + {/each} + + {:else} + + + No hay resultados. + + + {/each} + + +
+ +
+
+ Total: {totalItems} +
+
+ + +
+
diff --git a/frontend/src/lib/components/sidebar/modules.ts b/frontend/src/lib/components/sidebar/modules.ts index 5e7fe6ae..5ab973b2 100644 --- a/frontend/src/lib/components/sidebar/modules.ts +++ b/frontend/src/lib/components/sidebar/modules.ts @@ -15,6 +15,7 @@ import { Settings2, Shield, Ship, + Truck, Users, } from 'lucide-svelte'; import * as m from "$lib/paraglide/messages.js"; @@ -192,6 +193,7 @@ export function getSidebarData(): SidebarData { title: m["sidebar.general_catalogs.identifiers"](), url: "/dashboard/general_catalogs/identifiers", }, + // ------------------------------------- { title: m["sidebar.general_catalogs.incoterms"](), url: "/dashboard/reference_data/incoterms", @@ -333,6 +335,25 @@ export function getSidebarData(): SidebarData { }, ], }, + { + title: "Transportes", + url: "#", + icon: Truck, + items: [ + { + title: "Transportistas", + url: "/dashboard/general_catalogs/transporters", + }, + { + title: "Trailers", + url: "/dashboard/general_catalogs/trailers", + }, + { + title: "Vehículos", + url: "/dashboard/general_catalogs/vehicles", + }, + ], + }, { title: m["sidebar.goods.title"](), url: "#", @@ -522,4 +543,4 @@ export function getSidebarData(): SidebarData { } // Exportar también como constante para compatibilidad (deprecado) -export const sidebarData: SidebarData = getSidebarData(); +export const sidebarData: SidebarData = getSidebarData(); \ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte new file mode 100644 index 00000000..596c3d13 --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/trailers/+page.svelte @@ -0,0 +1,117 @@ + + +
+
+
+

Trailers

+

Gestión del catálogo de trailers de la compañía

+
+ +
+ +
+ + +
+ + {#if loading && data.length === 0} +
+ Cargando trailers... +
+ {:else} + + {/if} + + +
diff --git a/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte new file mode 100644 index 00000000..150e006b --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/transporters/+page.svelte @@ -0,0 +1,117 @@ + + +
+
+
+

Transportistas

+

Gestión del catálogo de líneas transportistas

+
+ +
+ +
+ + +
+ + {#if loading && data.length === 0} +
+ Cargando transportistas... +
+ {:else} + + {/if} + + +
diff --git a/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte new file mode 100644 index 00000000..1bcc8916 --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/vehicles/+page.svelte @@ -0,0 +1,119 @@ + + +
+
+
+

Vehículos (Transporte)

+

+ Gestión del catálogo de camiones y vehículos de transporte +

+
+ +
+ +
+ + +
+ + {#if loading && data.length === 0} +
+ Cargando vehículos... +
+ {:else} + + {/if} + + +
diff --git a/frontend/src/svelte-shims.d.ts b/frontend/src/svelte-shims.d.ts new file mode 100644 index 00000000..185afbcb --- /dev/null +++ b/frontend/src/svelte-shims.d.ts @@ -0,0 +1,7 @@ +// Ambient type declarations for .svelte files +// This must be a script (no top-level import/export) to be globally ambient +declare module "*.svelte" { + import type { Component } from "svelte"; + const component: Component; + export default component; +} From dbb828c92a0b68337fce87f1dec801c2793c0cb6 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 26 Feb 2026 12:04:31 -0600 Subject: [PATCH 46/54] recontruyendo CRUD en lugar de sitar --- .../fractions/us_tariff_fractions/routes.py | 40 ++---- .../fractions/us_tariff_fractions/service.py | 130 ++---------------- 2 files changed, 26 insertions(+), 144 deletions(-) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py index d5552c7e..daabcd8a 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py @@ -17,10 +17,19 @@ from .dto import ( ) from .service import USTariffFractionService -# Create base router with generic CRUD routes - REMOVED strictly read-only from Sitar -# Writes are disabled at API level, but Service still supports fallback writes if needed internally +# Create router using TenantCRUDRoutes factory for basic CRUD operations +crud_router = TenantCRUDRoutes( + service=USTariffFractionService, + create_schema=USTariffFractionCreateDTO, + update_schema=USTariffFractionUpdateDTO, + response_schema=USTariffFractionResponseDTO, + prefix="/us-tariff-fractions", + tags=["a76 / general catalogs / us tariff fractions"], + resource_name="US Tariff Fraction", + enable_list=False, # We implement our custom list endpoint +) -router = APIRouter(prefix="/us-tariff-fractions", tags=["a76 / general catalogs / us tariff fractions"]) +router = crud_router.router # Custom list endpoint with search filter @router.get( @@ -44,8 +53,8 @@ async def list_us_tariff_fractions( if search: filters["search"] = search - # Updated to async call with Sitar integration - items, total = await USTariffFractionService.get_all( + # Updated to sync call + items, total = USTariffFractionService.get_all( db, tenant_id, company_id, skip, page_size, filters ) @@ -56,24 +65,3 @@ async def list_us_tariff_fractions( "page_size": page_size, "pages": (total + page_size - 1) // page_size, } - - -@router.get( - "/{us_tariff_fraction_id}", - response_model=USTariffFractionResponseDTO, - summary="Get US Tariff Fraction by ID", - description="Get a specific US tariff fraction by ID (Lookups in Local DB for legacy compatibility)", -) -async def get_us_tariff_fraction( - us_tariff_fraction_id: int, - company_id: int = Query(..., description="Company ID"), - db: Session = Depends(get_core_db), - current_user: Dict[str, Any] = Depends(get_current_user), -): - tenant_id = validate_access_to_resource(db, company_id, current_user) - - item = USTariffFractionService.get_by_id(db, tenant_id, company_id, us_tariff_fraction_id) - if not item: - from fastapi import HTTPException - raise HTTPException(status_code=404, detail="US Tariff fraction not found") - return USTariffFractionResponseDTO.model_validate(item) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py index 877dfcc5..42e8b956 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py @@ -1,73 +1,21 @@ -""" -Service para fracciones arancelarias americanas -""" - from typing import List, Optional, Tuple, Dict, Any from sqlalchemy.orm import Session from sqlalchemy.exc import IntegrityError from fastapi import HTTPException -import zlib import logging -import re from decimal import Decimal from .models import USTariffFraction from .dto import USTariffFractionCreateDTO, USTariffFractionUpdateDTO -from api.v1.modules.sitar.fracciones_usa.service import FraccionesUSAService -from api.v1.modules.sitar.fracciones_usa.schemas import FraccionesUSAResponse logger = logging.getLogger(__name__) -class USTariffFractionMapper: - """Helper to map Sitar USA responses to Local domain objects""" - - @staticmethod - def to_domain(fraccion: FraccionesUSAResponse, tenant_id: int, company_id: int) -> USTariffFraction: - # Generate a deterministic numeric ID based on the unique code - # We use CRC32 to get a consistent integer implementation-independent - fake_id = zlib.crc32((fraccion.FRACCION_SIN_PUNTO or "").encode('utf-8')) - - # Parse numeric values safely - ad_valorem = None - if fraccion.TARIFA1: - try: - # Extract numbers from string like "5.2%" or similar if present - # Assuming TARIFA1 might be clean number or percentage string - clean_val = re.sub(r'[^\d.]', '', str(fraccion.TARIFA1)) - if clean_val: - ad_valorem = Decimal(clean_val) - except: - pass - - fixed_cost = None - if fraccion.ESPECIFICO: - try: - clean_val = re.sub(r'[^\d.]', '', str(fraccion.ESPECIFICO)) - if clean_val: - fixed_cost = Decimal(clean_val) - except: - pass - - return USTariffFraction( - id=fake_id, # Updated to use fake_id instead of sitar consecutive if needed, or consistent hash - tenant_id=tenant_id, - company_id=company_id, - code=fraccion.FRACCION_SIN_PUNTO or "", - prefix=None, # Not mapped from Sitar response currently - type_code=None, - ad_valorem=ad_valorem, - fixed_cost=fixed_cost, - unit_of_measure=fraccion.UNIDADCANTIDAD, - description=fraccion.DESCRIPCION - ) - - class USTariffFractionService: """Service para gestionar fracciones arancelarias americanas""" @staticmethod - async def get_all( + def get_all( db: Session, tenant_id: int, company_id: int, @@ -75,60 +23,7 @@ class USTariffFractionService: limit: int = 100, filters: Optional[Dict[str, Any]] = None, ) -> Tuple[List[USTariffFraction], int]: - """ - Obtiene todas las fracciones arancelarias americanas con filtros opcionales. - Estrategia: Sitar API -> Fallback Local DB - """ - - # 1. Try Sitar API - try: - sitar_service = FraccionesUSAService.get_instance() - - sitar_fraccion = None - has_filters = False - - if filters and filters.get("search"): - term = filters["search"] - # Sitar only filters by fraction code - if term.replace(".", "").isdigit(): - sitar_fraccion = term - has_filters = True - - sitar_items = await sitar_service.search( - fraccion=sitar_fraccion, - skip=skip, - limit=limit - ) - - # If Sitar returns empty list AND we didn't have specific filters, attempt fallback - if not sitar_items and not has_filters: - logger.warning("Sitar return empty list for USA broad query. Attempting fallback to local DB.") - return USTariffFractionService._get_all_local(db, tenant_id, company_id, skip, limit, filters) - - # Map items - items = [USTariffFractionMapper.to_domain(item, tenant_id, company_id) for item in sitar_items] - - # Estimate total - total = len(items) + skip - if len(items) == limit: - total += 1 - - return items, total - - except Exception as e: - logger.error(f"Error fetching USA Fractions from Sitar API, falling back to local DB: {e}") - return USTariffFractionService._get_all_local(db, tenant_id, company_id, skip, limit, filters) - - @staticmethod - def _get_all_local( - db: Session, - tenant_id: int, - company_id: int, - skip: int = 0, - limit: int = 100, - filters: Optional[Dict[str, Any]] = None, - ) -> Tuple[List[USTariffFraction], int]: - """Lógica original de consulta local""" + """Obtiene todas las fracciones locales con filtros opcionales.""" query = db.query(USTariffFraction).filter( USTariffFraction.tenant_id == tenant_id, USTariffFraction.company_id == company_id, @@ -150,13 +45,14 @@ class USTariffFractionService: return items, total + return items, total + @staticmethod def get_by_id( - db: Session, tenant_id: int, company_id: int, fraction_id: int + db: Session, fraction_id: int, tenant_id: int, company_id: int ) -> Optional[USTariffFraction]: """ - Obtiene por ID. - Legacy: Consulta Local DB. + Obtiene por ID local. """ return ( db.query(USTariffFraction) @@ -168,14 +64,12 @@ class USTariffFractionService: .first() ) - # WRITE OPERATIONS - DEPRECATED / LOCAL ONLY - @staticmethod def create( db: Session, + fraction_data: USTariffFractionCreateDTO, tenant_id: int, company_id: int, - fraction_data: USTariffFractionCreateDTO, ) -> USTariffFraction: try: db_fraction = USTariffFraction( @@ -198,13 +92,13 @@ class USTariffFractionService: @staticmethod def update( db: Session, - tenant_id: int, - company_id: int, fraction_id: int, + tenant_id: int, fraction_data: USTariffFractionUpdateDTO, + company_id: int, ) -> Optional[USTariffFraction]: db_fraction = USTariffFractionService.get_by_id( - db, tenant_id, company_id, fraction_id + db, fraction_id, tenant_id, company_id ) if not db_fraction: return None @@ -219,10 +113,10 @@ class USTariffFractionService: @staticmethod def delete( - db: Session, tenant_id: int, company_id: int, fraction_id: int + db: Session, fraction_id: int, tenant_id: int, company_id: int ) -> bool: db_fraction = USTariffFractionService.get_by_id( - db, tenant_id, company_id, fraction_id + db, fraction_id, tenant_id, company_id ) if not db_fraction: return False From 69fda145e9079cd16dccda665fb66a0240862da0 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Thu, 26 Feb 2026 12:23:37 -0600 Subject: [PATCH 47/54] =?UTF-8?q?Sincronizaci=C3=B3n=20de=20cambios=20loca?= =?UTF-8?q?les=20en=20scripts=20y=20configuraci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reinicio.sh | 0 scripts/backend-entrypoint.sh | 0 scripts/frontend-entrypoint.sh | 0 scripts/health-check.sh | 0 scripts/init_first_time.sh | 0 scripts/keycloak-entrypoint.sh | 0 scripts/postgres-app-entrypoint.sh | 0 scripts/postgres-keycloak-entrypoint.sh | 0 start.sh | 0 9 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 reinicio.sh mode change 100755 => 100644 scripts/backend-entrypoint.sh mode change 100755 => 100644 scripts/frontend-entrypoint.sh mode change 100755 => 100644 scripts/health-check.sh mode change 100755 => 100644 scripts/init_first_time.sh mode change 100755 => 100644 scripts/keycloak-entrypoint.sh mode change 100755 => 100644 scripts/postgres-app-entrypoint.sh mode change 100755 => 100644 scripts/postgres-keycloak-entrypoint.sh mode change 100755 => 100644 start.sh diff --git a/reinicio.sh b/reinicio.sh old mode 100755 new mode 100644 diff --git a/scripts/backend-entrypoint.sh b/scripts/backend-entrypoint.sh old mode 100755 new mode 100644 diff --git a/scripts/frontend-entrypoint.sh b/scripts/frontend-entrypoint.sh old mode 100755 new mode 100644 diff --git a/scripts/health-check.sh b/scripts/health-check.sh old mode 100755 new mode 100644 diff --git a/scripts/init_first_time.sh b/scripts/init_first_time.sh old mode 100755 new mode 100644 diff --git a/scripts/keycloak-entrypoint.sh b/scripts/keycloak-entrypoint.sh old mode 100755 new mode 100644 diff --git a/scripts/postgres-app-entrypoint.sh b/scripts/postgres-app-entrypoint.sh old mode 100755 new mode 100644 diff --git a/scripts/postgres-keycloak-entrypoint.sh b/scripts/postgres-keycloak-entrypoint.sh old mode 100755 new mode 100644 diff --git a/start.sh b/start.sh old mode 100755 new mode 100644 From fce8486a17e5a1fc5703e997a1b1bd60bfa7eb5d Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Thu, 26 Feb 2026 12:34:07 -0600 Subject: [PATCH 48/54] Fix duplicate identifiers in pedimentos.ts API --- frontend/src/lib/api/dashboard/a76/pedimentos.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/frontend/src/lib/api/dashboard/a76/pedimentos.ts b/frontend/src/lib/api/dashboard/a76/pedimentos.ts index 0ca432cf..8b9d46f6 100644 --- a/frontend/src/lib/api/dashboard/a76/pedimentos.ts +++ b/frontend/src/lib/api/dashboard/a76/pedimentos.ts @@ -194,7 +194,6 @@ export interface Pedimento { pedimento_config_parameters?: PedimentoConfigParameters | null; pedimento_config_updates?: PedimentoConfigUpdates | null; pedimento_config_update_rectification?: PedimentoConfigUpdateRectification | null; - pedimento_customs_offices?: PedimentoCustomsOffices | null; identificadores?: Identificador[] | null; } @@ -229,14 +228,12 @@ export interface CreatePedimentoData { pedimento_incrementables?: PedimentoIncrementables | null; pedimento_decrementables?: PedimentoDecrementables | null; pedimento_indexes?: PedimentoIndexes | null; - pedimento_customs_offices?: PedimentoCustomsOffices | null; pedimento_config_additional?: PedimentoConfigAdditional | null; pedimento_config_calculations?: PedimentoConfigCalculations | null; pedimento_config_surcharges?: PedimentoConfigSurcharges | null; pedimento_config_parameters?: PedimentoConfigParameters | null; pedimento_config_updates?: PedimentoConfigUpdates | null; pedimento_config_update_rectification?: PedimentoConfigUpdateRectification | null; - pedimento_customs_offices?: PedimentoCustomsOffices | null; identificadores?: Identificador[] | null; } @@ -264,14 +261,12 @@ export interface UpdatePedimentoData { pedimento_incrementables?: PedimentoIncrementables | null; pedimento_decrementables?: PedimentoDecrementables | null; pedimento_indexes?: PedimentoIndexes | null; - pedimento_customs_offices?: PedimentoCustomsOffices | null; pedimento_config_additional?: PedimentoConfigAdditional | null; pedimento_config_calculations?: PedimentoConfigCalculations | null; pedimento_config_surcharges?: PedimentoConfigSurcharges | null; pedimento_config_parameters?: PedimentoConfigParameters | null; pedimento_config_updates?: PedimentoConfigUpdates | null; pedimento_config_update_rectification?: PedimentoConfigUpdateRectification | null; - pedimento_customs_offices?: PedimentoCustomsOffices | null; identificadores?: Identificador[] | null; } From 3723cfd50ec25e03bd9a13ef05f504d0c19e8009 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 26 Feb 2026 16:45:56 -0600 Subject: [PATCH 49/54] Sistema CRUD sin servicio sitar --- .../fractions/tariff_fractions/routes.py | 17 ++++--- .../fractions/tariff_fractions/service.py | 12 +++-- .../fractions/us_tariff_fractions/dto.py | 39 +++++++++++++++- .../fractions/us_tariff_fractions/routes.py | 1 + backend/test_debug.py | 44 +++++++++++++++++++ backend/test_user_info.py | 39 ++++++++++++++++ .../fractions/TariffFractionFormDialog.svelte | 26 +++++++---- .../goods/fractions/TariffFractionList.svelte | 2 +- 8 files changed, 157 insertions(+), 23 deletions(-) create mode 100644 backend/test_debug.py create mode 100644 backend/test_user_info.py diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py index 5f0f1600..21277c99 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/routes.py @@ -8,7 +8,7 @@ from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from core.database import get_core_db -from core.security import get_current_user +from core.security import get_current_user, get_tenant_from_token from .dto import ( TariffFractionCreateDTO, @@ -27,6 +27,7 @@ router = APIRouter(prefix="/tariff-fractions", tags=["a76 / general catalogs / t description="Get paginated list of Tariff Fractions with optional search filter (global catalog)", ) async def list_tariff_fractions( + company_id: int = Query(..., description="Company ID"), page: int = Query(1, ge=1, description="Page number"), page_size: int = Query(50, ge=1, le=10000, description="Page size"), search: Optional[str] = Query(None, description="Search in code, fraction, description, nico, or umt"), @@ -47,8 +48,9 @@ async def list_tariff_fractions( # Service.get_all calls Sitar (async) or DB (sync). # This should be fine. - tenant_id = current_user.get("tenant_id") - company_id = current_user.get("company_id") # Assuming user is context-aware or we use a default? + tenant_id = get_tenant_from_token(current_user) + if tenant_id is None: + tenant_id = current_user.get("tenant_id") # If using headers for selected company, it might be in current_user context if middleware sets it. items, total = await TariffFractionService.get_all( @@ -121,7 +123,7 @@ async def create_tariff_fraction( pass us_dto = USTariffFractionCreateDTO( - code=fraction_data.code, + code=fraction_data.fraction, # Store the punctuated fraction in the DB description=fraction_data.description, unit_of_measure=fraction_data.umt, ad_valorem=ad_valorem, @@ -131,7 +133,7 @@ async def create_tariff_fraction( fixed_cost=None ) - created = USTariffFractionService.create(db, tenant_id, company_id, us_dto) + created = USTariffFractionService.create(db, us_dto, tenant_id, company_id) return TariffFractionService.to_domain_usa_local(created) else: @@ -171,12 +173,13 @@ async def update_tariff_fraction( pass us_dto = USTariffFractionUpdateDTO( + code=fraction_data.fraction, description=fraction_data.description, unit_of_measure=fraction_data.umt, ad_valorem=ad_valorem ) - updated = USTariffFractionService.update(db, tenant_id, company_id, tariff_fraction_id, us_dto) + updated = USTariffFractionService.update(db, tariff_fraction_id, tenant_id, us_dto, company_id) if not updated: raise HTTPException(status_code=404, detail="US Tariff fraction not found") return TariffFractionService.to_domain_usa_local(updated) @@ -202,7 +205,7 @@ async def delete_tariff_fraction( if catalog == "american": from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService - success = USTariffFractionService.delete(db, tenant_id, company_id, tariff_fraction_id) + success = USTariffFractionService.delete(db, tariff_fraction_id, tenant_id, company_id) if not success: raise HTTPException(status_code=404, detail="US Tariff fraction not found") return {"ok": True} diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py index 7a00b364..65530eef 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py @@ -96,10 +96,14 @@ class TariffFractionService: # US format: 1234.56.78.90. For now return as is or use helper if available. # item is USTariffFraction (imported inside method to avoid circular import if needed, or assumed available) + # Remove formatting (e.g. dots) for the 'code' property + code_str = str(item.code) + clean_code = code_str.replace(".", "").replace("-", "") + return TariffFraction( id=item.id, - code=item.code, - fraction=item.code, # TODO: Format if needed + code=clean_code, + fraction=code_str, description=item.description or "(Sin descripción)", nico=None, umt=item.unit_of_measure, @@ -133,11 +137,11 @@ class TariffFractionService: from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService # Use local service directly - usa_items, total = USTariffFractionService._get_all_local( + usa_items, total = USTariffFractionService.get_all( db, tenant_id, company_id, skip, limit, filters ) - items = [TariffFractionMapper.to_domain_usa_local(item) for item in usa_items] + items = [TariffFractionService.to_domain_usa_local(item) for item in usa_items] return items, total # USA CATALOG HANDLING (API - 'Fracciones US') diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/dto.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/dto.py index 1c943349..c316dc08 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/dto.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/dto.py @@ -3,9 +3,9 @@ DTOs para fracciones arancelarias americanas """ from datetime import datetime -from typing import Optional +from typing import Optional, Any -from pydantic import BaseModel, Field, ConfigDict +from pydantic import BaseModel, Field, ConfigDict, model_validator class USTariffFractionCreateDTO(BaseModel): @@ -23,6 +23,7 @@ class USTariffFractionCreateDTO(BaseModel): class USTariffFractionUpdateDTO(BaseModel): """DTO para actualizar fracción arancelaria americana""" + code: Optional[str] = Field(None, max_length=16) prefix: Optional[str] = Field(None, max_length=10) type_code: Optional[str] = Field(None, max_length=10) ad_valorem: Optional[float] = None @@ -38,6 +39,7 @@ class USTariffFractionResponseDTO(BaseModel): id: int code: str + fraction: Optional[str] = None prefix: Optional[str] = None type_code: Optional[str] = None ad_valorem: Optional[float] = None @@ -46,3 +48,36 @@ class USTariffFractionResponseDTO(BaseModel): description: Optional[str] = None created_at: datetime updated_at: datetime + + @model_validator(mode="before") + @classmethod + def format_code_and_fraction(cls, data: Any) -> Any: + # Check if data is an ORM model or dict + if hasattr(data, "code"): + raw_code = data.code + elif isinstance(data, dict): + raw_code = data.get("code") + else: + return data + + if raw_code: + code_str = str(raw_code) + # fraction keeps the original formatted string + fraction = code_str + # code strips dots and hyphens + code = code_str.replace(".", "").replace("-", "") + + if isinstance(data, dict): + data["code"] = code + data["fraction"] = fraction + else: + # If it's an ORM object, we can't easily modify the object's attribute + # cleanly without side effects for other things, so we convert it to dict + new_data = { + c.name: getattr(data, c.name) for c in data.__table__.columns + } + new_data["code"] = code + new_data["fraction"] = fraction + return new_data + + return data diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py index daabcd8a..f6521624 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py @@ -26,6 +26,7 @@ crud_router = TenantCRUDRoutes( prefix="/us-tariff-fractions", tags=["a76 / general catalogs / us tariff fractions"], resource_name="US Tariff Fraction", + id_name="id", enable_list=False, # We implement our custom list endpoint ) diff --git a/backend/test_debug.py b/backend/test_debug.py new file mode 100644 index 00000000..cfb342be --- /dev/null +++ b/backend/test_debug.py @@ -0,0 +1,44 @@ +import sys +import os +sys.path.append('/app') +sys.path.append('/home/josmar/dev/anexo76/backend') + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +import asyncio +import logging + +# Disable logging to keep output clean +logging.basicConfig(level=logging.ERROR) + +from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.service import TariffFractionService +from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.dto import TariffFractionResponseDTO + +async def test(): + # Use the database URL from the environment or default + db_url = "postgresql://postgres:postgres@anexo76-postgres-a76:5432/anexo76_core" + engine = create_engine(db_url) + Session = sessionmaker(bind=engine) + db = Session() + + try: + print("Starting test for catalog='american'...") + items, total = await TariffFractionService.get_all( + db, skip=0, limit=10, filters=None, catalog="american", tenant_id=1, company_id=1 + ) + print(f"Service Success! Total: {total}") + + print("Validating items with TariffFractionResponseDTO...") + for item in items: + dto = TariffFractionResponseDTO.model_validate(item) + print(f"DTO: ID={dto.id}, Code={dto.code}, Fraction={dto.fraction}") + + except Exception as e: + print(f"Error caught: {type(e).__name__}: {e}") + import traceback + traceback.print_exc() + finally: + db.close() + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/backend/test_user_info.py b/backend/test_user_info.py new file mode 100644 index 00000000..17f2cc2b --- /dev/null +++ b/backend/test_user_info.py @@ -0,0 +1,39 @@ +import sys +import os +sys.path.append('/app') +sys.path.append('/home/josmar/dev/anexo76/backend') + +from sqlalchemy import create_engine, text +from sqlalchemy.orm import sessionmaker + +def test(): + db_url = "postgresql://postgres:postgres@anexo76-postgres-a76:5432/anexo76_core" + engine = create_engine(db_url) + Session = sessionmaker(bind=engine) + db = Session() + + try: + print("Checking users and tenants...") + # Check users + users = db.execute(text("SELECT id, email, tenant_id FROM a76.users")).fetchall() + for u in users: + print(f"User ID: {u.id} | Email: {u.email} | Tenant ID: {u.tenant_id}") + + # Check companies + companies = db.execute(text("SELECT id, name, tenant_id FROM a76.companies")).fetchall() + for c in companies: + print(f"Company ID: {c.id} | Name: {c.name} | Tenant ID: {c.tenant_id}") + + # Check fractions + fractions = db.execute(text("SELECT id, code, tenant_id, company_id FROM a76.us_tariff_fractions")).fetchall() + print(f"Total US Fractions in DB: {len(fractions)}") + for f in fractions: + print(f"Fraction ID: {f.id} | Code: {f.code} | Tenant ID: {f.tenant_id} | Company ID: {f.company_id}") + + except Exception as e: + print(f"Error: {e}") + finally: + db.close() + +if __name__ == "__main__": + test() diff --git a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte index 93eea293..d92d48e5 100644 --- a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte +++ b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte @@ -126,17 +126,25 @@
- - - {#if fraction} -

- El código no se puede modificar una vez creado. -

- {/if} + + +

+ {catalog === 'mex' + ? 'El código se genera automáticamente.' + : 'La clave se deriva de la fracción sin puntos.'} +

- - + +
diff --git a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionList.svelte b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionList.svelte index 15e75d87..ba3ea1cf 100644 --- a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionList.svelte +++ b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionList.svelte @@ -310,7 +310,7 @@ fraction={selectedFraction} {catalog} onSuccess={() => { - loadFractions(); + loadFractions(true); isFormDialogOpen = false; }} /> From 5e114bb564c9e552534c84400d5baaf344d7fe04 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 26 Feb 2026 16:52:48 -0600 Subject: [PATCH 50/54] Se agrego los efectos para caluclar la clave --- .../goods/fractions/TariffFractionFormDialog.svelte | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte index d92d48e5..9e0a6b62 100644 --- a/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte +++ b/frontend/src/lib/components/dashboard/goods/fractions/TariffFractionFormDialog.svelte @@ -66,6 +66,13 @@ } }); + // Sync code with fractionFormatted for US catalog + $effect(() => { + if (catalog === 'usa' || catalog === 'american') { + code = fractionFormatted.replace(/\./g, '').replace(/-/g, ''); + } + }); + async function handleSubmit() { const companyId = companyStore.activeCompany?.id; if (!companyId) return; @@ -126,9 +133,7 @@
- +

{catalog === 'mex' From dbffc95e67710b65340288b86b9d555f0c26ec69 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Thu, 26 Feb 2026 18:03:14 -0600 Subject: [PATCH 51/54] Correcion de yml y los script --- backend/core/celery_app.py | 2 +- docker-compose.yml | 3 --- scripts/backend-entrypoint.sh | 0 scripts/frontend-entrypoint.sh | 0 scripts/health-check.sh | 0 scripts/init_first_time.sh | 0 scripts/keycloak-entrypoint.sh | 0 scripts/postgres-app-entrypoint.sh | 0 scripts/postgres-keycloak-entrypoint.sh | 0 start.sh | 0 10 files changed, 1 insertion(+), 4 deletions(-) mode change 100644 => 100755 scripts/backend-entrypoint.sh mode change 100644 => 100755 scripts/frontend-entrypoint.sh mode change 100644 => 100755 scripts/health-check.sh mode change 100644 => 100755 scripts/init_first_time.sh mode change 100644 => 100755 scripts/keycloak-entrypoint.sh mode change 100644 => 100755 scripts/postgres-app-entrypoint.sh mode change 100644 => 100755 scripts/postgres-keycloak-entrypoint.sh mode change 100644 => 100755 start.sh diff --git a/backend/core/celery_app.py b/backend/core/celery_app.py index 35694fea..e5648d42 100644 --- a/backend/core/celery_app.py +++ b/backend/core/celery_app.py @@ -28,7 +28,7 @@ celery_app.conf.update( "api.v1.modules.a76.imports.tasks", "api.v1.modules.a76.reports.exportacion.transmission.MAINX30.task", "api.v1.modules.a76.reports.importacion.transmission.temporal.MAINX30.task", - "api.v1.modules.a76.reports.importacion.transmission.definitive.MAINX30.task" + "api.v1.modules.a76.reports.importacion.transmission.definitive.MAINX30.task", "api.v1.modules.core.help_center.tasks" ] # Ruta al módulo donde están las tareas ) diff --git a/docker-compose.yml b/docker-compose.yml index aeb6990b..5ae2e394 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -332,9 +332,6 @@ services: - backend_uploads:/app/uploads networks: - backend-net - volumes: - - ./backend:/app - valkey: image: valkey/valkey:7.2 diff --git a/scripts/backend-entrypoint.sh b/scripts/backend-entrypoint.sh old mode 100644 new mode 100755 diff --git a/scripts/frontend-entrypoint.sh b/scripts/frontend-entrypoint.sh old mode 100644 new mode 100755 diff --git a/scripts/health-check.sh b/scripts/health-check.sh old mode 100644 new mode 100755 diff --git a/scripts/init_first_time.sh b/scripts/init_first_time.sh old mode 100644 new mode 100755 diff --git a/scripts/keycloak-entrypoint.sh b/scripts/keycloak-entrypoint.sh old mode 100644 new mode 100755 diff --git a/scripts/postgres-app-entrypoint.sh b/scripts/postgres-app-entrypoint.sh old mode 100644 new mode 100755 diff --git a/scripts/postgres-keycloak-entrypoint.sh b/scripts/postgres-keycloak-entrypoint.sh old mode 100644 new mode 100755 diff --git a/start.sh b/start.sh old mode 100644 new mode 100755 From 18f63951acd7b5cc82a479304cbe0b3925c6d398 Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Fri, 27 Feb 2026 09:19:27 -0600 Subject: [PATCH 52/54] Se corrigio el problema de las fracciones americanas y problemas al guardar --- backend/api/v1/modules/a76/classes/dto.py | 4 ++++ backend/api/v1/modules/a76/classes/service.py | 4 ++++ .../fractions/us_tariff_fractions/service.py | 6 +++--- frontend/src/lib/api.ts | 2 +- .../goods/classes/forms/FixedAssetClassForm.svelte | 2 +- .../dashboard/goods/fixed-asset-classes/+page.svelte | 8 ++++++++ 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/backend/api/v1/modules/a76/classes/dto.py b/backend/api/v1/modules/a76/classes/dto.py index 68054f2a..b8047e2f 100644 --- a/backend/api/v1/modules/a76/classes/dto.py +++ b/backend/api/v1/modules/a76/classes/dto.py @@ -221,6 +221,10 @@ class ClassWithFADataResponse(BaseModel): # FA-specific fields (embedded from a24.fa_classes) fa_class_id: Optional[int] = None + import_tariff_code: Optional[str] = None + import_tariff_type: Optional[str] = None + export_tariff_code: Optional[str] = None + export_tariff_type: Optional[str] = None depreciation_rate: Optional[Decimal] = None fda_code: Optional[str] = None eccn_code: Optional[str] = None diff --git a/backend/api/v1/modules/a76/classes/service.py b/backend/api/v1/modules/a76/classes/service.py index 4decee1c..904adddf 100644 --- a/backend/api/v1/modules/a76/classes/service.py +++ b/backend/api/v1/modules/a76/classes/service.py @@ -150,6 +150,10 @@ class ClassService: "updated_at": base_class.updated_at, # FA extension fields (None if no FA record exists) "fa_class_id": fa_class.id if fa_class else None, + "import_tariff_code": fa_class.import_tariff_code if fa_class else None, + "import_tariff_type": fa_class.import_tariff_type if fa_class else None, + "export_tariff_code": fa_class.export_tariff_code if fa_class else None, + "export_tariff_type": fa_class.export_tariff_type if fa_class else None, "depreciation_rate": fa_class.depreciation_rate if fa_class else None, "fda_code": fa_class.fda_code if fa_class else None, "eccn_code": fa_class.eccn_code if fa_class else None, diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py index 877dfcc5..25894e11 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py @@ -100,9 +100,9 @@ class USTariffFractionService: limit=limit ) - # If Sitar returns empty list AND we didn't have specific filters, attempt fallback - if not sitar_items and not has_filters: - logger.warning("Sitar return empty list for USA broad query. Attempting fallback to local DB.") + # If Sitar returns empty list, attempt fallback to local DB + if not sitar_items: + logger.info(f"Sitar returned no results for USA query (filters={has_filters}). Attempting fallback to local DB.") return USTariffFractionService._get_all_local(db, tenant_id, company_id, skip, limit, filters) # Map items diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index aed649d2..baa8f75c 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -270,7 +270,7 @@ async function fetchApi( } return { - error: data.message || data.detail || 'Error en la petición', + error: data.message || (typeof data.detail === 'string' ? data.detail : JSON.stringify(data.detail)) || 'Error en la petición', status: response.status }; } diff --git a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte index fb406f32..d5578a0c 100644 --- a/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte +++ b/frontend/src/lib/components/dashboard/goods/classes/forms/FixedAssetClassForm.svelte @@ -541,7 +541,7 @@ class="uppercase {validationErrors.class_code ? 'border-red-500 focus-visible:ring-red-500' : ''}" - maxlength={20} + maxlength={8} oninput={() => { if (validationErrors.class_code) { const errors = { ...validationErrors }; diff --git a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte index 5a0af337..35ccccde 100644 --- a/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte +++ b/frontend/src/routes/dashboard/goods/fixed-asset-classes/+page.svelte @@ -14,6 +14,10 @@ // Tipo extendido que combina A76Class y FAClass interface FixedAssetClassExtended extends A76Class { fa_class_id?: number; + import_tariff_code?: string | null; + import_tariff_type?: string | null; + export_tariff_code?: string | null; + export_tariff_type?: string | null; depreciation_rate?: number | null; fda_code?: string | null; eccn_code?: string | null; @@ -578,6 +582,10 @@ cleanData.depreciation_rate != null ? Number(cleanData.depreciation_rate) : null, + import_tariff_code: cleanData.import_tariff_code || null, + import_tariff_type: cleanData.import_tariff_type || null, + export_tariff_code: cleanData.export_tariff_code || null, + export_tariff_type: cleanData.export_tariff_type || null, fda_code: (cleanData.fda_key ?? cleanData.fda_code) || null, eccn_code: cleanData.eccn_code || null }, From 35a6f88211912a56720da5c1754577f7f26be6d1 Mon Sep 17 00:00:00 2001 From: AlexeerCT Date: Fri, 27 Feb 2026 11:07:16 -0600 Subject: [PATCH 53/54] Refactor US Tariff Fractions service to use async for get_all method and add USTariffFractionMapper for response mapping --- .../fractions/us_tariff_fractions/routes.py | 3 +- .../fractions/us_tariff_fractions/service.py | 37 ++++++++++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py index f6521624..158bf765 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/routes.py @@ -54,8 +54,7 @@ async def list_us_tariff_fractions( if search: filters["search"] = search - # Updated to sync call - items, total = USTariffFractionService.get_all( + items, total = await USTariffFractionService.get_all( db, tenant_id, company_id, skip, page_size, filters ) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py index 1409b2f9..124f6460 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py @@ -1,4 +1,5 @@ from typing import List, Optional, Tuple, Dict, Any +from datetime import datetime from sqlalchemy.orm import Session from sqlalchemy.exc import IntegrityError from fastapi import HTTPException @@ -7,15 +8,49 @@ from decimal import Decimal from .models import USTariffFraction from .dto import USTariffFractionCreateDTO, USTariffFractionUpdateDTO +from api.v1.modules.sitar.fracciones_usa.service import FraccionesUSAService logger = logging.getLogger(__name__) +class USTariffFractionMapper: + """Maps Sitar FraccionesUSAResponse objects to USTariffFraction domain objects""" + + @staticmethod + def to_domain( + item: Any, tenant_id: int, company_id: int + ) -> USTariffFraction: + """Convert a FraccionesUSAResponse to a USTariffFraction instance (not persisted)""" + code = item.FRACCION_CON_PUNTO or item.FRACCION_MOSTRAR or item.FRACCION_SIN_PUNTO or "" + ad_valorem: Optional[float] = None + if item.TARIFA1: + try: + ad_valorem = float(str(item.TARIFA1).replace("%", "").strip()) + except (ValueError, TypeError): + ad_valorem = None + + fraction = USTariffFraction() + fraction.id = item.CONSECUTIVO + fraction.tenant_id = tenant_id + fraction.company_id = company_id + fraction.code = code + fraction.prefix = item.FRACCION_SIN_PUNTO + fraction.type_code = str(item.NIVEL) if item.NIVEL is not None else None + fraction.ad_valorem = ad_valorem + fraction.fixed_cost = None + fraction.unit_of_measure = item.UNIDADCANTIDAD + fraction.description = item.DESCRIPCION + now = datetime.now() + fraction.created_at = now + fraction.updated_at = now + return fraction + + class USTariffFractionService: """Service para gestionar fracciones arancelarias americanas""" @staticmethod - def get_all( + async def get_all( db: Session, tenant_id: int, company_id: int, From 5367c9a687ed7550c03ec28d3af53cc90980c121 Mon Sep 17 00:00:00 2001 From: AlexeerCT Date: Fri, 27 Feb 2026 12:01:29 -0600 Subject: [PATCH 54/54] Refactor USTariffFractionService to use async in get_all method and clean up redundant return statement --- .../general_catalogs/fractions/tariff_fractions/service.py | 2 +- .../general_catalogs/fractions/us_tariff_fractions/service.py | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py index 65530eef..380cf508 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/tariff_fractions/service.py @@ -137,7 +137,7 @@ class TariffFractionService: from api.v1.modules.a76.general_catalogs.fractions.us_tariff_fractions.service import USTariffFractionService # Use local service directly - usa_items, total = USTariffFractionService.get_all( + usa_items, total = await USTariffFractionService.get_all( db, tenant_id, company_id, skip, limit, filters ) diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py index 124f6460..e2fd10ee 100644 --- a/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/us_tariff_fractions/service.py @@ -131,9 +131,7 @@ class USTariffFractionService: total = query.count() items = query.order_by(USTariffFraction.code).offset(skip).limit(limit).all() - return items, total - - return items, total + return items, total @staticmethod def get_by_id(