885 lines
27 KiB
JSON
885 lines
27 KiB
JSON
{
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Welcome to TaskMate!",
|
|
"description": "Set up your family chore management system. You can customize the points currency that children will earn.",
|
|
"data": {
|
|
"points_name": "Points Currency Name (e.g., Stars, Coins, Bucks)",
|
|
"points_icon": "Points Icon"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"name_required": "Name is required"
|
|
},
|
|
"abort": {
|
|
"already_configured": "TaskMate is already configured"
|
|
}
|
|
},
|
|
"selector": {
|
|
"chore_action": {
|
|
"options": {
|
|
"save": "Save Changes",
|
|
"re_enable": "Re-enable Chore",
|
|
"disable": "Disable Chore",
|
|
"delete": "Delete This Chore"
|
|
}
|
|
},
|
|
"reward_action": {
|
|
"options": {
|
|
"save": "Save Changes",
|
|
"delete": "Delete Reward"
|
|
}
|
|
},
|
|
"time_category": {
|
|
"options": {
|
|
"morning": "Morning",
|
|
"afternoon": "Afternoon",
|
|
"evening": "Evening",
|
|
"night": "Night",
|
|
"anytime": "Anytime"
|
|
}
|
|
},
|
|
"schedule_mode": {
|
|
"options": {
|
|
"specific_days": "Specific days of the week",
|
|
"recurring": "Recurring (every N days/weeks/months)",
|
|
"one_shot": "One-time task (single day)"
|
|
}
|
|
},
|
|
"due_days_option": {
|
|
"options": {
|
|
"monday": "Monday",
|
|
"tuesday": "Tuesday",
|
|
"wednesday": "Wednesday",
|
|
"thursday": "Thursday",
|
|
"friday": "Friday",
|
|
"saturday": "Saturday",
|
|
"sunday": "Sunday"
|
|
}
|
|
},
|
|
"recurrence": {
|
|
"options": {
|
|
"every_2_days": "Every 2 days",
|
|
"weekly": "Weekly",
|
|
"every_2_weeks": "Every 2 weeks",
|
|
"monthly": "Monthly",
|
|
"every_3_months": "Every 3 months",
|
|
"every_6_months": "Every 6 months"
|
|
}
|
|
},
|
|
"recurrence_day_option": {
|
|
"options": {
|
|
"monday": "Monday",
|
|
"tuesday": "Tuesday",
|
|
"wednesday": "Wednesday",
|
|
"thursday": "Thursday",
|
|
"friday": "Friday",
|
|
"saturday": "Saturday",
|
|
"sunday": "Sunday",
|
|
"any_day": "Any day"
|
|
}
|
|
},
|
|
"first_occurrence_mode": {
|
|
"options": {
|
|
"available_immediately": "Available immediately",
|
|
"wait_for_first_occurrence": "Wait for first scheduled occurrence"
|
|
}
|
|
},
|
|
"streak_reset_mode": {
|
|
"options": {
|
|
"reset": "Reset — streak goes to 0 on missed day",
|
|
"pause": "Pause — streak preserved until next completion"
|
|
}
|
|
},
|
|
"visibility_operator": {
|
|
"options": {
|
|
"none": "No filter — Always show chore",
|
|
"equals": "Equals — Show when entity state matches exactly",
|
|
"not_equals": "Not Equal — Show when entity state does not match",
|
|
"gte": "Greater than or equal (≥) — Show when numeric value is ≥ target",
|
|
"lte": "Less than or equal (≤) — Show when numeric value is ≤ target",
|
|
"gt": "Greater than (>) — Show when numeric value is > target",
|
|
"lt": "Less than (<) — Show when numeric value is < target"
|
|
}
|
|
},
|
|
"assignment_mode": {
|
|
"options": {
|
|
"everyone": "Everyone — every assigned child sees the chore",
|
|
"alternating": "Alternating — rotate through the assigned children, one per day",
|
|
"random": "Random — pick one assigned child at random each day",
|
|
"balanced": "Balanced — split today's balanced chores evenly across the assigned children",
|
|
"first_come": "First come, first served — first child to complete it wins; it hides for the rest",
|
|
"unassigned": "Unassigned — no child sees this chore"
|
|
}
|
|
},
|
|
"task_group_policy": {
|
|
"options": {
|
|
"sticky": "Sticky — same child for all chores in the group",
|
|
"spread": "Spread — different children across the group today"
|
|
}
|
|
},
|
|
"task_group_action": {
|
|
"options": {
|
|
"save": "Save Changes",
|
|
"delete": "Delete Group"
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"complete_chore": {
|
|
"name": "Complete Chore",
|
|
"description": "Mark a chore as completed by a child",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the chore to complete"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child completing the chore"
|
|
}
|
|
}
|
|
},
|
|
"complete_bonus_subtask": {
|
|
"name": "Complete Bonus Sub-task",
|
|
"description": "Complete a bonus sub-task after the parent chore is done",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the parent chore"
|
|
},
|
|
"bonus_subtask_id": {
|
|
"name": "Bonus Sub-task ID",
|
|
"description": "The ID of the bonus sub-task to complete"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child completing the bonus sub-task"
|
|
}
|
|
}
|
|
},
|
|
"approve_chore": {
|
|
"name": "Approve Chore",
|
|
"description": "Approve a completed chore and award points",
|
|
"fields": {
|
|
"completion_id": {
|
|
"name": "Completion ID",
|
|
"description": "The ID of the chore completion to approve"
|
|
}
|
|
}
|
|
},
|
|
"approve_all_chores": {
|
|
"name": "Approve All Chores",
|
|
"description": "Approve all pending chore completions (or a specific set) and award points",
|
|
"fields": {
|
|
"completion_ids": {
|
|
"name": "Completion IDs",
|
|
"description": "Specific completion IDs to approve; omit to approve all pending"
|
|
}
|
|
}
|
|
},
|
|
"reject_chore": {
|
|
"name": "Reject Chore",
|
|
"description": "Reject a completed chore",
|
|
"fields": {
|
|
"completion_id": {
|
|
"name": "Completion ID",
|
|
"description": "The ID of the chore completion to reject"
|
|
}
|
|
}
|
|
},
|
|
"undo_chore_approval": {
|
|
"name": "Undo Chore Approval",
|
|
"description": "Reverse an accidental chore approval — removes the awarded points and returns the completion to pending so it can be approved again.",
|
|
"fields": {
|
|
"completion_id": {
|
|
"name": "Completion ID",
|
|
"description": "The ID of the approved chore completion to revert to pending"
|
|
}
|
|
}
|
|
},
|
|
"undo_transaction": {
|
|
"name": "Undo Transaction",
|
|
"description": "Reverse a points transaction by its ID — penalties, bonuses, manual add/remove adjustments and gifts (both legs). Automatic transactions (weekend/streak/perfect-week bonuses, pool moves, decay, interest) can't be undone.",
|
|
"fields": {
|
|
"transaction_id": {
|
|
"name": "Transaction ID",
|
|
"description": "The ID of the points transaction to reverse"
|
|
}
|
|
}
|
|
},
|
|
"claim_reward": {
|
|
"name": "Claim Reward",
|
|
"description": "Child claims a reward using their points",
|
|
"fields": {
|
|
"reward_id": {
|
|
"name": "Reward ID",
|
|
"description": "The ID of the reward to claim"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child claiming the reward"
|
|
}
|
|
}
|
|
},
|
|
"approve_reward": {
|
|
"name": "Approve Reward",
|
|
"description": "Approve a reward claim",
|
|
"fields": {
|
|
"claim_id": {
|
|
"name": "Claim ID",
|
|
"description": "The ID of the reward claim to approve"
|
|
}
|
|
}
|
|
},
|
|
"allocate_points_to_pool": {
|
|
"name": "Allocate Points to Pool",
|
|
"description": "Move points from a child's spendable balance into a reward's savings pool (locked).",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child making the allocation"
|
|
},
|
|
"reward_id": {
|
|
"name": "Reward ID",
|
|
"description": "The ID of the reward pool to deposit into"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "Number of points to allocate (capped at pool capacity and spendable balance)"
|
|
}
|
|
}
|
|
},
|
|
"add_points": {
|
|
"name": "Add Points",
|
|
"description": "Add bonus points to a child",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child to add points to"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "The number of points to add"
|
|
},
|
|
"reason": {
|
|
"name": "Reason",
|
|
"description": "Optional reason for the bonus"
|
|
}
|
|
}
|
|
},
|
|
"remove_points": {
|
|
"name": "Remove Points",
|
|
"description": "Remove points from a child (penalty)",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child to remove points from"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "The number of points to remove"
|
|
},
|
|
"reason": {
|
|
"name": "Reason",
|
|
"description": "Optional reason for the penalty"
|
|
}
|
|
}
|
|
},
|
|
"reject_reward": {
|
|
"name": "Reject Reward",
|
|
"description": "Reject a reward claim",
|
|
"fields": {
|
|
"claim_id": {
|
|
"name": "Claim ID",
|
|
"description": "The ID of the reward claim to reject"
|
|
}
|
|
}
|
|
},
|
|
"preview_sound": {
|
|
"name": "Preview Sound",
|
|
"description": "Preview a completion sound effect in the browser",
|
|
"fields": {
|
|
"sound": {
|
|
"name": "Sound",
|
|
"description": "The sound to preview"
|
|
}
|
|
}
|
|
},
|
|
"set_chore_order": {
|
|
"name": "Set Chore Order",
|
|
"description": "Set the display order of chores for a child",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child to set chore order for"
|
|
},
|
|
"chore_order": {
|
|
"name": "Chore Order",
|
|
"description": "Ordered list of chore IDs"
|
|
}
|
|
}
|
|
},
|
|
"add_penalty": {
|
|
"name": "Add Penalty",
|
|
"description": "Create a new penalty definition",
|
|
"fields": {
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "The name of the penalty"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "The number of points to deduct when applied"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "Optional description of the penalty"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "MDI icon for the penalty"
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned To",
|
|
"description": "List of child IDs this penalty applies to"
|
|
}
|
|
}
|
|
},
|
|
"update_penalty": {
|
|
"name": "Update Penalty",
|
|
"description": "Update an existing penalty definition",
|
|
"fields": {
|
|
"penalty_id": {
|
|
"name": "Penalty ID",
|
|
"description": "The ID of the penalty to update"
|
|
},
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "New name for the penalty"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "New points value"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "New description"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "New icon"
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned To",
|
|
"description": "New list of child IDs"
|
|
}
|
|
}
|
|
},
|
|
"remove_penalty": {
|
|
"name": "Remove Penalty",
|
|
"description": "Remove a penalty definition",
|
|
"fields": {
|
|
"penalty_id": {
|
|
"name": "Penalty ID",
|
|
"description": "The ID of the penalty to remove"
|
|
}
|
|
}
|
|
},
|
|
"apply_penalty": {
|
|
"name": "Apply Penalty",
|
|
"description": "Apply a penalty to a child, deducting points",
|
|
"fields": {
|
|
"penalty_id": {
|
|
"name": "Penalty ID",
|
|
"description": "The ID of the penalty to apply"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child to apply the penalty to"
|
|
}
|
|
}
|
|
},
|
|
"add_bonus": {
|
|
"name": "Add Bonus",
|
|
"description": "Create a new bonus definition",
|
|
"fields": {
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "The name of the bonus"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "The number of points to award when applied"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "Optional description of the bonus"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "MDI icon for the bonus"
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned To",
|
|
"description": "List of child IDs this bonus applies to"
|
|
}
|
|
}
|
|
},
|
|
"update_bonus": {
|
|
"name": "Update Bonus",
|
|
"description": "Update an existing bonus definition",
|
|
"fields": {
|
|
"bonus_id": {
|
|
"name": "Bonus ID",
|
|
"description": "The ID of the bonus to update"
|
|
},
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "New name for the bonus"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "New points value"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "New description"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "New icon"
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned To",
|
|
"description": "New list of child IDs"
|
|
}
|
|
}
|
|
},
|
|
"remove_bonus": {
|
|
"name": "Remove Bonus",
|
|
"description": "Remove a bonus definition",
|
|
"fields": {
|
|
"bonus_id": {
|
|
"name": "Bonus ID",
|
|
"description": "The ID of the bonus to remove"
|
|
}
|
|
}
|
|
},
|
|
"apply_bonus": {
|
|
"name": "Apply Bonus",
|
|
"description": "Apply a bonus to a child, awarding points",
|
|
"fields": {
|
|
"bonus_id": {
|
|
"name": "Bonus ID",
|
|
"description": "The ID of the bonus to apply"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child to apply the bonus to"
|
|
}
|
|
}
|
|
},
|
|
"add_chore": {
|
|
"name": "Add Chore",
|
|
"description": "Create a new chore dynamically, typically from an automation or script",
|
|
"fields": {
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "The name of the chore"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "Optional description of the chore"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "Points awarded when this chore is completed"
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned To",
|
|
"description": "List of child IDs to assign this chore to. Leave empty to assign to all children"
|
|
},
|
|
"time_category": {
|
|
"name": "Time Category",
|
|
"description": "When this chore should be completed: morning, afternoon, evening, night, or anytime"
|
|
},
|
|
"one_shot": {
|
|
"name": "One-Shot",
|
|
"description": "If true, this is a one-time chore that expires after being completed or at the end of the day"
|
|
},
|
|
"requires_approval": {
|
|
"name": "Requires Approval",
|
|
"description": "If true, a parent must approve the completion before points are awarded"
|
|
}
|
|
}
|
|
},
|
|
"skip_chore": {
|
|
"name": "Skip Chore",
|
|
"description": "Advance today's rotation past the current assignee. Ephemeral — tomorrow's rotation resumes as normal.",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the chore to skip"
|
|
}
|
|
}
|
|
},
|
|
"set_chore_manual_start": {
|
|
"name": "Set Manual Start Child",
|
|
"description": "Set which child starts a rotating chore. For alternating mode this reorders the pool; for random/balanced it only overrides today's assignee.",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the chore to update"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child who should start the rotation"
|
|
}
|
|
}
|
|
},
|
|
"add_task_group": {
|
|
"name": "Add Task Group",
|
|
"description": "Create a task group (sticky = same child, spread = different children).",
|
|
"fields": {
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "Display name for the group"
|
|
},
|
|
"policy": {
|
|
"name": "Policy",
|
|
"description": "sticky (same child) or spread (different children)"
|
|
},
|
|
"chore_ids": {
|
|
"name": "Chore IDs",
|
|
"description": "List of chore IDs in the group. For sticky, the first chore is the leader."
|
|
}
|
|
}
|
|
},
|
|
"update_task_group": {
|
|
"name": "Update Task Group",
|
|
"description": "Update a task group's name, policy, or membership.",
|
|
"fields": {
|
|
"group_id": {
|
|
"name": "Group ID",
|
|
"description": "The ID of the group to update"
|
|
},
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "New display name"
|
|
},
|
|
"policy": {
|
|
"name": "Policy",
|
|
"description": "New policy (sticky or spread)"
|
|
},
|
|
"chore_ids": {
|
|
"name": "Chore IDs",
|
|
"description": "Replacement chore ID list. For sticky, the first chore is the leader."
|
|
}
|
|
}
|
|
},
|
|
"remove_task_group": {
|
|
"name": "Remove Task Group",
|
|
"description": "Delete a task group. Member chores are not affected.",
|
|
"fields": {
|
|
"group_id": {
|
|
"name": "Group ID",
|
|
"description": "The ID of the group to delete"
|
|
}
|
|
}
|
|
},
|
|
"start_timed_task": {
|
|
"name": "Start Timed Task",
|
|
"description": "Start or resume the timer on a timed task",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the timed chore"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child starting the timer"
|
|
}
|
|
}
|
|
},
|
|
"pause_timed_task": {
|
|
"name": "Pause Timed Task",
|
|
"description": "Pause a running timed task timer",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the timed chore"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child pausing the timer"
|
|
}
|
|
}
|
|
},
|
|
"stop_timed_task": {
|
|
"name": "Stop Timed Task",
|
|
"description": "Stop a timed task timer and submit for approval",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the timed chore"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child stopping the timer"
|
|
}
|
|
}
|
|
},
|
|
"add_badge": {
|
|
"name": "Add Badge",
|
|
"description": "Create a custom badge.",
|
|
"fields": {
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "The display name of the badge"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "Description of how the badge is earned"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "Icon for the badge (e.g. mdi:beach)"
|
|
},
|
|
"tier": {
|
|
"name": "Tier",
|
|
"description": "Badge tier: bronze, silver, gold or platinum"
|
|
},
|
|
"point_bonus": {
|
|
"name": "Point bonus",
|
|
"description": "Points credited to the child when the badge is earned"
|
|
},
|
|
"criteria": {
|
|
"name": "Criteria",
|
|
"description": "List of metric / operator / value dicts. Empty = manual-award only."
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned to",
|
|
"description": "List of child IDs (empty = all)"
|
|
},
|
|
"notify_on_earn": {
|
|
"name": "Notify on earn",
|
|
"description": "Send a notification when the badge is earned"
|
|
}
|
|
}
|
|
},
|
|
"update_badge": {
|
|
"name": "Update Badge",
|
|
"description": "Update an existing badge. For built-ins, only point_bonus, tier, assigned_to, enabled, notify_on_earn are editable.",
|
|
"fields": {
|
|
"badge_id": {
|
|
"name": "Badge ID",
|
|
"description": "The ID of the badge to update"
|
|
},
|
|
"name": {
|
|
"name": "Name",
|
|
"description": "New display name of the badge"
|
|
},
|
|
"description": {
|
|
"name": "Description",
|
|
"description": "New description of the badge"
|
|
},
|
|
"icon": {
|
|
"name": "Icon",
|
|
"description": "New icon for the badge"
|
|
},
|
|
"tier": {
|
|
"name": "Tier",
|
|
"description": "Badge tier: bronze, silver, gold or platinum"
|
|
},
|
|
"point_bonus": {
|
|
"name": "Point bonus",
|
|
"description": "Points credited to the child when the badge is earned"
|
|
},
|
|
"criteria": {
|
|
"name": "Criteria",
|
|
"description": "List of metric / operator / value dicts. Empty = manual-award only."
|
|
},
|
|
"assigned_to": {
|
|
"name": "Assigned to",
|
|
"description": "List of child IDs (empty = all)"
|
|
},
|
|
"enabled": {
|
|
"name": "Enabled",
|
|
"description": "Whether the badge is active"
|
|
},
|
|
"notify_on_earn": {
|
|
"name": "Notify on earn",
|
|
"description": "Send a notification when the badge is earned"
|
|
}
|
|
}
|
|
},
|
|
"remove_badge": {
|
|
"name": "Remove Badge",
|
|
"description": "Remove a custom badge. Built-ins cannot be removed.",
|
|
"fields": {
|
|
"badge_id": {
|
|
"name": "Badge ID",
|
|
"description": "The ID of the badge to remove"
|
|
}
|
|
}
|
|
},
|
|
"award_badge_manually": {
|
|
"name": "Award Badge Manually",
|
|
"description": "Manually award a badge to a child.",
|
|
"fields": {
|
|
"badge_id": {
|
|
"name": "Badge ID",
|
|
"description": "The ID of the badge to award"
|
|
},
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child receiving the badge"
|
|
}
|
|
}
|
|
},
|
|
"revoke_badge": {
|
|
"name": "Revoke Badge",
|
|
"description": "Revoke an awarded badge. If a point bonus was credited, it is reversed.",
|
|
"fields": {
|
|
"awarded_badge_id": {
|
|
"name": "Awarded Badge ID",
|
|
"description": "The ID of the awarded badge record to revoke"
|
|
}
|
|
}
|
|
},
|
|
"rebuild_badges": {
|
|
"name": "Rebuild Badges",
|
|
"description": "Re-evaluate all badges across all children silently (no notifications, no point bonuses)."
|
|
},
|
|
"apply_mandatory_penalty": {
|
|
"name": "Apply Mandatory Penalty",
|
|
"description": "Deduct the configured penalty points for a missed mandatory chore and clear the review item.",
|
|
"fields": {
|
|
"miss_id": {
|
|
"name": "Miss ID",
|
|
"description": "The ID of the mandatory-miss review item"
|
|
}
|
|
}
|
|
},
|
|
"choose_avatar": {
|
|
"name": "Choose Avatar",
|
|
"description": "A child switches to an avatar they have unlocked.",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child"
|
|
},
|
|
"icon": {
|
|
"name": "Avatar icon",
|
|
"description": "The mdi icon of an unlocked catalogue avatar (e.g. mdi:rocket-launch)."
|
|
}
|
|
}
|
|
},
|
|
"dismiss_mandatory_chore": {
|
|
"name": "Dismiss Mandatory Chore",
|
|
"description": "Clear a missed mandatory chore review item with no penalty.",
|
|
"fields": {
|
|
"miss_id": {
|
|
"name": "Miss ID",
|
|
"description": "The ID of the mandatory-miss review item"
|
|
}
|
|
}
|
|
},
|
|
"gift_points": {
|
|
"name": "Gift Points",
|
|
"description": "Transfer spendable points from one child to another (parent-controlled).",
|
|
"fields": {
|
|
"from_child_id": {
|
|
"name": "From child ID",
|
|
"description": "The ID of the child sending points"
|
|
},
|
|
"to_child_id": {
|
|
"name": "To child ID",
|
|
"description": "The ID of the child receiving points"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "The number of points to transfer"
|
|
}
|
|
}
|
|
},
|
|
"postpone_mandatory_chore": {
|
|
"name": "Postpone Mandatory Chore",
|
|
"description": "Give a missed mandatory chore another period (or tomorrow) without a penalty, and clear the review item.",
|
|
"fields": {
|
|
"miss_id": {
|
|
"name": "Miss ID",
|
|
"description": "The ID of the mandatory-miss review item"
|
|
}
|
|
}
|
|
},
|
|
"request_swap": {
|
|
"name": "Request Chore Swap",
|
|
"description": "A child requests to take over today's rotation assignment of a chore (pending parent approval).",
|
|
"fields": {
|
|
"chore_id": {
|
|
"name": "Chore ID",
|
|
"description": "The ID of the chore to take over"
|
|
},
|
|
"requester_id": {
|
|
"name": "Requester child ID",
|
|
"description": "The ID of the child requesting the swap"
|
|
}
|
|
}
|
|
},
|
|
"test_notification": {
|
|
"name": "Test Notification",
|
|
"description": "Send a sample notification of the given type to its enabled recipients (ignores the master on/off so routing can be verified).",
|
|
"fields": {
|
|
"type_id": {
|
|
"name": "Notification type",
|
|
"description": "Notification type id, e.g. pending_chore_approval, badge_earned, streak_milestone"
|
|
}
|
|
}
|
|
},
|
|
"record_allowance_payout": {
|
|
"name": "Record Allowance Payout",
|
|
"description": "Deduct points and record a real-money allowance payout in the ledger (fixed conversion rate; parent-controlled).",
|
|
"fields": {
|
|
"child_id": {
|
|
"name": "Child ID",
|
|
"description": "The ID of the child receiving the payout"
|
|
},
|
|
"points": {
|
|
"name": "Points",
|
|
"description": "Points to convert to cash and deduct"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"entity": {
|
|
"sensor": {
|
|
"child_stats": {
|
|
"unit_of_measurement": "chores"
|
|
},
|
|
"child_badges": {
|
|
"unit_of_measurement": "badges"
|
|
}
|
|
},
|
|
"number": {
|
|
"weekend_multiplier": {
|
|
"name": "Weekend multiplier"
|
|
},
|
|
"perfect_week_bonus": {
|
|
"name": "Perfect week bonus"
|
|
}
|
|
},
|
|
"select": {
|
|
"streak_reset_mode": {
|
|
"name": "Streak reset mode"
|
|
},
|
|
"card_design": {
|
|
"name": "Card design"
|
|
}
|
|
}
|
|
}
|
|
}
|