""" Options: Date: 2026-11-10 16:42:38 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetOnboardingStatusRequest.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OnboardingLock: reason: Optional[str] = None feature_key: Optional[str] = None feature_name: Optional[str] = None module_key: Optional[str] = None module_name: Optional[str] = None expires_at: Optional[datetime.datetime] = None requested_at: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OnboardingStep: key: Optional[str] = None chapter: Optional[str] = None title: Optional[str] = None why: Optional[str] = None help_html: Optional[str] = None icon: Optional[str] = None cta_label: Optional[str] = None cta_route: Optional[str] = None required: bool = False state: int = 0 done: bool = False auto_detected: bool = False count: int = 0 requires: List[str] = field(default_factory=list) detects_count: bool = False lock_key: Optional[str] = None locked: Optional[OnboardingLock] = None in_trial: bool = False trial_ends_at: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OnboardingChapter: name: Optional[str] = None color: Optional[str] = None total: int = 0 satisfied: int = 0 full: bool = False progress: Optional[str] = None lock_reason: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DispatchModuleView: key: Optional[str] = None mode: Optional[str] = None name: Optional[str] = None what: Optional[str] = None allowed: bool = False enabled: bool = False in_pack: bool = False adds: List[str] = field(default_factory=list) go_screens: Optional[str] = None fleet: bool = False in_flight: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OnboardingStatus: tenant_name: Optional[str] = None property_term: Optional[str] = None steps: List[OnboardingStep] = field(default_factory=list) total_steps: int = 0 done_steps: int = 0 satisfied_steps: int = 0 required_total: int = 0 required_done: int = 0 percent_complete: int = 0 is_complete: bool = False dismissed: bool = False chapters: List[OnboardingChapter] = field(default_factory=list) driver_services: List[DispatchModuleView] = field(default_factory=list) driver_services_on: bool = False modules_on: int = 0 modules_skipped: int = 0 response_status: Optional[ResponseStatus] = None # @Route("/v1/onboarding/status", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetOnboardingStatusRequest(IReturn[OnboardingStatus]): pass