""" Options: Date: 2026-08-01 04:15:25 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: CostCalcRequest.* #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 CostInput: base: Decimal = decimal.Decimal(0) bill_rate: Decimal = decimal.Decimal(0) fringe_cash: Decimal = decimal.Decimal(0) fringe_plan: Decimal = decimal.Decimal(0) is_night: bool = False hours_per_day: Decimal = decimal.Decimal(0) on_days: int = 0 on_days_exact: Optional[Decimal] = None has_travel: bool = False per_diem_eligible: bool = False prevailing_wage: bool = False jurisdiction: Optional[str] = None unit: Optional[str] = None prior_hours: Decimal = decimal.Decimal(0) burden_class: Optional[str] = None wc_rate_override: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CostLine: label: Optional[str] = None detail: Optional[str] = None amount: Decimal = decimal.Decimal(0) rule_id: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CostBreakdown: rrop: Decimal = decimal.Decimal(0) st: Decimal = decimal.Decimal(0) ot: Decimal = decimal.Decimal(0) dt: Decimal = decimal.Decimal(0) total_hours: Decimal = decimal.Decimal(0) straight: Decimal = decimal.Decimal(0) diff_pay: Decimal = decimal.Decimal(0) ot_premium: Decimal = decimal.Decimal(0) dt_premium: Decimal = decimal.Decimal(0) cash_wages: Decimal = decimal.Decimal(0) fringe_cash_pay: Decimal = decimal.Decimal(0) fringe_plan_pay: Decimal = decimal.Decimal(0) burden_pct: Decimal = decimal.Decimal(0) burden_amount: Decimal = decimal.Decimal(0) per_diem_applies: bool = False per_diem_cost: Decimal = decimal.Decimal(0) per_diem_taxable: Decimal = decimal.Decimal(0) per_diem_non_tax: Decimal = decimal.Decimal(0) loaded: Decimal = decimal.Decimal(0) revenue: Decimal = decimal.Decimal(0) margin: Decimal = decimal.Decimal(0) margin_pct: Decimal = decimal.Decimal(0) ot_multiplier: Decimal = decimal.Decimal(0) dt_multiplier: Decimal = decimal.Decimal(0) per_diem_daily: Decimal = decimal.Decimal(0) lines: List[CostLine] = field(default_factory=list) notes: List[str] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CostCalcResponse: result: Optional[CostBreakdown] = None resolved_input: Optional[CostInput] = None can_see_pay: bool = False response_status: Optional[ResponseStatus] = None # @Route("/v1/workforce/calc", "POST") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CostCalcRequest(IReturn[CostCalcResponse]): input: Optional[CostInput] = None contact_i_d: Optional[int] = None project_i_d: Optional[int] = None shift_pattern_i_d: Optional[int] = None unit: Optional[str] = None