Appearance
Reports, Alerts & Calendar Tools
get_project_accrual_basis
Revenue recognised, cost accrued, and net for a project as of any date. Manager/Owner.
Use this tool for any question involving:
- "What's the accrual basis for [project]?"
- "What will the P&L be on [date]?"
- "How much revenue have we recognised?"
- "What's the accrued cost so far?"
Reads from: 01. Time Entries, 02. Projects, 03. Users, 13. Rate_History, 14. Liabilities
Parameters:
| Param | Description |
|---|---|
requesting_user_slack_id | |
project_name | Project to query |
as_of | YYYY-MM-DD — defaults to today. Past dates clip entries; future dates use locked-in entries + deterministic liability accrual. |
Returns:
revenue_recognised— earned revenue as ofas_ofper project type (see below)labour_cost— hours × effective cost rate for each logged entry on or beforeas_ofliability_cost— pro-rata vendor fixed payment agreement cost:agreed_amount × elapsed_days / total_daystotal_cost—labour_cost + liability_costnet—revenue_recognised − total_costbreakdown.liability_overrides— per-vendor:agreed_amount,accrued_cost,descriptionbreakdown.per_user— per-person labour detail:user_id,total_hours,total_cost,rate_changed,segments[](one per rate period; each segment hasrate,hours,cost,effectiveFrom)breakdown.rate_adjusted—trueif any user's cost rate changed during the period
Revenue rules by project type:
| Type | Revenue formula |
|---|---|
| T&M | hours_logged × billing_rate |
| Fixed Price | (hours_logged / hours_budget) × contract_value, capped at 100% |
| Retainer / Agile | Sum across active period/sprint children: (child_hours / child_budget) × child_contract_value |
| Pro Bono | $0 |
| Internal | $0 |
Future dates: revenue reflects only entries already in the system — VERA never extrapolates from pace. Liability cost grows deterministically to the project deadline regardless of allocations.
Example queries:
- "What's the accrual basis for the Humbug project?" →
as_ofomitted (defaults to today) - "What will the accrual basis be two weeks from today?" →
as_of = <today + 14 days> - "What was the P&L on March 15th?" →
as_of = 2026-03-15
generate_monthly_report
Portfolio P&L for the current (or specified) month. Owner/Manager — role-filtered results.
Reads from: 01. Time Entries, 02. Projects, 22. Projects Master, 13. Rate_History, 14. Liabilities
Parameters:
| Param | Description |
|---|---|
requesting_user_slack_id | |
month | YYYY-MM — defaults to current month |
Returns:
- Per-project: name, hours_logged, budget_hours, utilisation%, burn_rate_status, revenue (Owner), cost (Owner), margin (Owner)
total_revenue_overrun: revenue at risk from over-budget projects (Owner)open_items_total: unresolved items count- Summary: over_budget_count, under_utilised_count
Status emojis: 🚨 critical_overpace | ⚠️ warning_overpace | ✅ on_track | 📉 warning_underpace | 🔴 critical_underpace | ➖ no status
get_export_data
Raw export of all operational data for external analysis. Owner only.
Reads from: All operational sheets
Returns: time_entries, projects, users, tasks, clients — full data without role-filtering
This is also triggered automatically when a user asks to "export" or requests a CSV in conversation.
get_proactive_alerts
Current alerts across burn rate, stale items, and envelope gaps. Manager/Owner.
No parameters required (beyond requesting_user_slack_id).
Returns grouped by type:
| Type | Severity | Trigger |
|---|---|---|
burn_rate | critical / warning | Retainer pacing over/under budget |
stale_item | warning | Unresolved item open > N days |
allocation_gap | info | Project with no coverage in upcoming weeks |
Interpretation:
critical→ immediate action requiredwarning→ action needed sooninfo→ worth reviewing
Never auto-resolve alerts — always let the Manager decide the action.
get_unresolved_items
Open operational issues that need attention. Manager/Owner.
Reads from: 11. Unresolved_Items, 02. Projects, 03. Users
Parameters:
| Param | Description |
|---|---|
requesting_user_slack_id | |
status | "open" (default), "resolved", "dismissed" |
Item types:
sick_conflict— user sick while they have active project envelopesleave_conflict— leave logged while they have active project envelopespto_conflict— PTO approved while they have active project envelopestime_off_request— pending time off request awaiting approval
Managers see only items for their assigned projects. Owners see all.
resolve_item
Mark an unresolved item as resolved — use when the Manager has taken action (e.g. reassigned work, updated envelopes). Manager/Owner.
Updates: 11. Unresolved_Items cols G:I
Parameters: requesting_user_slack_id, item_id, resolution_summary
dismiss_item
Dismiss an unresolved item without action — use when the Manager acknowledges the issue but decides no action is needed. Manager/Owner.
Updates: 11. Unresolved_Items col G (status → "dismissed")
Parameters: requesting_user_slack_id, item_id
get_resolution_options
Ranked list of resolution options for an unresolved item, with consequences. Manager/Owner.
Parameters: requesting_user_slack_id, item_id
Returns: ranked options, each with:
- Action description
- Consequence
- Tools needed to execute
Options are ranked by disruption level (lowest disruption first). Always present consequences to the Manager before asking them to choose. Never auto-execute an option.
add_company_holiday
Add a holiday or company event to the calendar. Owner only.
Writes to: 12. Company_Calendar
Parameters: requesting_user_slack_id, date, name, type ("holiday" or "company_event")
Only "holiday" entries block PTO requests and are excluded from leave date ranges.
list_company_holidays
All calendar entries.
Reads from: 12. Company_Calendar
Parameters: requesting_user_slack_id
remove_company_holiday
Delete a calendar entry by ID. Owner only.
Deletes from: 12. Company_Calendar
Parameters: requesting_user_slack_id, holiday_id
To find the holiday ID, call
list_company_holidaysfirst.
get_work_week
Return the current work week configuration. Any role.
Returns work_week.days (array of day abbreviations: Mon–Sun) and work_week.hours_per_day. If the tenant has never called set_work_week, the defaults are returned: Mon–Fri, 8 hours/day.
set_work_week
Configure the tenant's working days. Owner only.
Parameters: requesting_user_slack_id, days (array of abbreviations: Mon–Sun), hours_per_day (number)
Default is Monday–Friday, 8 hours/day. Work week settings affect:
- Leave date range calculations (weekends skipped)
- PTO hour defaults
- Capacity forecast calculations