schema_version: "1.0-draft"
generated_from: services.capabilities.build_capabilities_manifest
reviewed_at: "2026-08-01"
maturity_levels: [declared, implemented, contract_tested, provider_tested, published]
zones:
  users:
    legacy_operations: 15
    api:
      reads: [list_users, get_user, get_user_by_email, get_users_with_customfields, get_users_with_documentsandphotos, get_users_with_featureaccess, get_users_with_notes, get_users_with_permissiongroups, get_users_with_trackingcentredefaults]
      writes: [create_user, update_user, update_user_customfields, update_user_permissiongroups, update_user_featureaccess]
      maturity: implemented
    bot:
      writes: [ui_upload_user_documents]
      maturity: implemented
    target_canonical: [users.list, users.get, users.search, users.create, users.update, users.documents.upload]
  permissiongroups:
    legacy_operations: 1
    api: {reads: [list_permissiongroups], maturity: implemented}
    bot: {operations: [], maturity: declared}
    target_canonical: [permission_groups.list]
  userpositions:
    legacy_operations: 1
    api: {reads: [list_userpositions], maturity: implemented}
    bot: {operations: [], maturity: declared}
    target_canonical: [user_positions.list]
  businessunits:
    legacy_operations: 4
    api:
      reads: [list_businessunits, list_archived_businessunits, get_businessunits_with_locations, get_businessunits_with_priorities]
      maturity: implemented
    bot: {operations: [], maturity: declared}
    target_canonical: [business_units.list, business_units.get]
  timesheets:
    legacy_operations: 9
    api:
      reads: [list_timesheets, get_timesheet, get_timesheets_by_user, get_timesheets_by_user_range, get_timesheets_by_task, get_timesheets_by_type, get_timesheets_after_workdate]
      maturity: implemented
    bot:
      writes: [ui_create_timesheet_entries, ui_delete_timesheet_entries]
      maturity: implemented
    target_canonical: [timesheets.list, timesheets.get, timesheets.create, timesheets.delete]
  tasks:
    legacy_operations: 26
    api:
      reads: [list_tasks, get_task, get_tasks_due_for_date_range, get_tasks_with_assets, get_tasks_with_assignedhistory, get_tasks_with_customfields, get_tasks_with_documentsandphotos, get_tasks_with_expense, get_tasks_with_labour, get_tasks_with_location, get_tasks_with_locationcustomfields, get_tasks_with_material, get_tasks_with_notes, get_tasks_with_project, get_tasks_with_purchaseorders, get_tasks_with_quote, get_tasks_with_salesperson, get_tasks_with_substatus, get_tasks_with_tasktotals]
      writes: [create_task, update_task, mark_task_linkprocessed, insert_task_notes, insert_task_adhoc_materials, update_task_substatus, update_task_project_stage]
      maturity: implemented
    bot: {operations: [], maturity: declared}
    target_canonical: [tasks.list, tasks.get, tasks.create, tasks.update, tasks.notes.create, tasks.materials.create]
  overheads:
    legacy_operations: 3
    local:
      reads: [list_overheads, get_overhead, search_overheads]
      maturity: implemented
      note: Consumer-specific labels currently exist and require scope review.
    target_canonical: [overheads.list, overheads.get, overheads.search]
  trackingcentres:
    legacy_operations: 3
    api:
      reads: [list_trackingcentres, get_trackingcentre, resolve_trackingcentre_id_by_name]
      maturity: implemented
    bot: {operations: [], maturity: declared}
    target_canonical: [tracking_centres.list, tracking_centres.get, tracking_centres.search]

