169 lines
3.8 KiB
JSON
169 lines
3.8 KiB
JSON
{
|
|
"name": "RateCard",
|
|
"type": "object",
|
|
"properties": {
|
|
"rate_card_number": {
|
|
"type": "string",
|
|
"description": "Rate Card Number format RC-#### (auto-generated)",
|
|
"pattern": "^RC-[0-9]{4}$"
|
|
},
|
|
"vendor_id": {
|
|
"type": "string",
|
|
"description": "Vendor ID"
|
|
},
|
|
"vendor_name": {
|
|
"type": "string",
|
|
"description": "Vendor name"
|
|
},
|
|
"partner_id": {
|
|
"type": "string",
|
|
"description": "Partner ID (if partner-specific)"
|
|
},
|
|
"partner_name": {
|
|
"type": "string",
|
|
"description": "Partner name (if partner-specific)"
|
|
},
|
|
"sector_id": {
|
|
"type": "string",
|
|
"description": "Sector ID (if sector-specific)"
|
|
},
|
|
"effective_start_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"description": "Rate card effective start date"
|
|
},
|
|
"effective_end_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"description": "Rate card effective end date"
|
|
},
|
|
"region": {
|
|
"type": "string",
|
|
"description": "Geographic region (e.g., 'San Francisco Bay Area')"
|
|
},
|
|
"state": {
|
|
"type": "string",
|
|
"description": "State"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"description": "Role/position"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Kitchen and Culinary",
|
|
"Concessions",
|
|
"Facilities",
|
|
"Bartending",
|
|
"Security",
|
|
"Event Staff",
|
|
"Management",
|
|
"Technical",
|
|
"Other"
|
|
],
|
|
"description": "Role category"
|
|
},
|
|
"pay_rate": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Worker pay rate per hour"
|
|
},
|
|
"bill_rate": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Client bill rate per hour"
|
|
},
|
|
"markup_amount": {
|
|
"type": "number",
|
|
"description": "Markup amount in dollars"
|
|
},
|
|
"markup_percentage": {
|
|
"type": "number",
|
|
"description": "Markup as percentage"
|
|
},
|
|
"overtime_pay_rate": {
|
|
"type": "number",
|
|
"description": "Overtime pay rate (typically 1.5x)"
|
|
},
|
|
"overtime_bill_rate": {
|
|
"type": "number",
|
|
"description": "Overtime bill rate"
|
|
},
|
|
"overtime_rules": {
|
|
"type": "object",
|
|
"description": "Overtime rules",
|
|
"properties": {
|
|
"daily_threshold_hours": {
|
|
"type": "number"
|
|
},
|
|
"weekly_threshold_hours": {
|
|
"type": "number"
|
|
},
|
|
"overtime_multiplier": {
|
|
"type": "number",
|
|
"default": 1.5
|
|
}
|
|
}
|
|
},
|
|
"exceptions": {
|
|
"type": "array",
|
|
"description": "Rate exceptions",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"condition": {
|
|
"type": "string"
|
|
},
|
|
"exception_rate": {
|
|
"type": "number"
|
|
},
|
|
"notes": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"minimum_hours": {
|
|
"type": "number",
|
|
"description": "Minimum billable hours"
|
|
},
|
|
"travel_rate": {
|
|
"type": "number",
|
|
"description": "Travel reimbursement rate"
|
|
},
|
|
"meal_allowance": {
|
|
"type": "number",
|
|
"description": "Meal allowance if applicable"
|
|
},
|
|
"uniform_charge": {
|
|
"type": "number",
|
|
"description": "Uniform charge if applicable"
|
|
},
|
|
"is_active": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Is rate card currently active"
|
|
},
|
|
"approved_by": {
|
|
"type": "string",
|
|
"description": "Who approved this rate card"
|
|
},
|
|
"approved_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"description": "Approval date"
|
|
},
|
|
"notes": {
|
|
"type": "string",
|
|
"description": "Rate card notes"
|
|
}
|
|
},
|
|
"required": [
|
|
"vendor_id",
|
|
"role",
|
|
"pay_rate",
|
|
"bill_rate",
|
|
"effective_start_date"
|
|
]
|
|
} |