{ "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" } } } }