# Backupchecks – Autotask Integration ## Functional Design *Last updated: 2026-01-16* --- ## 1. Scope & Goals This document describes the **functional design and agreed decisions** for the first phase of the Autotask integration in Backupchecks. Goals for phase 1: - Allow operators to **manually create Autotask tickets** from Backupchecks. - Ensure **full operator control** over when a ticket is created. - Prevent ticket spam and duplicate tickets. - Maintain clear ownership between Backupchecks and Autotask. - Provide a safe and auditable way to resolve tickets from Backupchecks. Out of scope for phase 1: - Automatic ticket creation - Automatic ticket closing on success - Issue correlation across multiple runs - Time entry creation or modification --- ## 2. Core Principles (Leading) These principles apply to all design and implementation choices: - Autotask is an **external authoritative system** (PSA). - Backupchecks is a **consumer**, not an owner, of PSA data. - **IDs are leading**, names are display-only. - All PSA mappings are **explicit**, never implicit or automatic. - Operators always retain **manual control**. - Renaming in Autotask must **never break mappings**. --- ## 3. Customer ↔ Autotask Company Mapping ### 3.1 Mapping model - Mapping is configured in the **Customers** screen. - Mapping is a **1-to-1 explicit relationship**. - Stored values per customer: - PSA type: autotask - Autotask Company ID (leading) - Autotask Company Name (cached for display) - Last sync timestamp - Mapping status: ok | renamed | missing | invalid The Autotask Company ID is the source of truth. The name exists only for UI clarity. ### 3.2 Name synchronisation - If the company name is changed in Autotask: - Backupchecks updates the cached name automatically. - The mapping remains intact. - Backupchecks customer names are independent and never overwritten. ### 3.3 Failure scenarios - Autotask company deleted or inaccessible: - Mapping status becomes invalid. - Ticket creation is blocked. - UI clearly indicates broken mapping. --- ## 4. Ticket Creation Model ### 4.1 Operator-driven creation - Tickets are created only via an explicit operator action. - Location: Run Checks page. - Manual ticket number input is removed. - A new action replaces it: Create Autotask ticket. ### 4.2 One ticket per run - Exactly one ticket per run. - A run can never create multiple tickets. - If a ticket exists: - Creation action is replaced by Open ticket. ### 4.3 Ticket contents (baseline) Minimum ticket fields: - Subject: [Backupchecks] - - - Description: - Run date/time - Backup type and job - Affected objects - Error or warning messages - Reference to Backupchecks --- ## 5. Ticket State Tracking in Backupchecks Per run, Backupchecks stores: - Autotask Ticket ID - Autotask Ticket Number - Ticket URL - Created by - Created at timestamp - Last known ticket status (snapshot) --- ## 6. Ticket Resolution from Backupchecks Backupchecks may resolve a ticket only if: - The ticket exists - The ticket is not already closed - No time entries are present If time entries exist, the ticket is not closed and an internal system note is added. --- ## 7. Backupchecks Settings Settings → Extensions & Integrations → Autotask Includes: - Enable integration (on/off) - Environment - API credentials - Tracking Identifier - Default queue and status - Priority mapping ### 7.1 Enable / disable behaviour (mandatory) Backupchecks must support switching the Autotask integration **on and off at any time**. When Autotask integration is **enabled**: - Autotask actions are available (create ticket, resolve ticket, link existing ticket). - Ticket polling/synchronisation (Phase 2) is active. When Autotask integration is **disabled**: - Backupchecks falls back to the manual workflow: - Operators can manually enter ticket numbers. - No Autotask API calls are executed. - No polling is performed. - No resolve action is available (as it would require Autotask calls). - Existing stored Autotask references remain visible for audit/history. The enable/disable switch must be reversible and must not require data deletion or migration. --- ## 8. Roles & Permissions - Admin / Operator: create and resolve tickets - Reporter: view-only access --- ## 9. Explicit Non-Goals (Phase 1) - Automatic ticket creation - Automatic ticket closing - Time entry handling - Multiple tickets per run - PSA-side logic --- ## 10. Phase 1 Summary Phase 1 delivers controlled, operator-driven PSA integration with a strong focus on auditability and predictability. --- ## 11. Phase 2 – Ticket State Synchronisation (PSA-driven) This phase introduces **PSA-driven state awareness** for already linked tickets. The goal is to keep Backupchecks aligned with Autotask **without introducing active control or automation**. ### 11.1 Polling strategy (Run Checks entry point) - Polling is executed **only when Autotask integration is enabled**. - When the **Run Checks** page is opened, Backupchecks performs a **targeted poll** to Autotask. - When the **Run Checks** page is opened, Backupchecks performs a **targeted poll** to Autotask. - Only tickets that are: - Linked to runs shown on the page, and - Not in a terminal state inside Backupchecks are included. - Tickets already marked as resolved or broken are excluded. This prevents unnecessary API calls and limits polling to operator-relevant context. ### 11.2 Active-ticket-only retrieval - Backupchecks only queries tickets that are considered **active** in Autotask. - Completed or closed tickets are not included in the active-ticket query. - This ensures minimal load and avoids repeated retrieval of historical data. ### 11.3 PSA-driven completion handling If Autotask reports a ticket with status **Completed**: - The linked run in Backupchecks is automatically marked as **Resolved**. - The resolution is explicitly flagged as: - **Resolved by PSA** - Backupchecks does not add notes or modify the ticket in Autotask. UI behaviour: - Operators can clearly see that the resolution originated from the PSA. - A visual indicator highlights that the underlying backup issue may still require verification. ### 11.4 Operator awareness and follow-up When a ticket is resolved by PSA: - Backupchecks does not assume the technical issue is resolved. - Operators are expected to: - Review the related run - Decide whether further action is required inside Backupchecks No automatic reopening or ticket creation is performed. ### 11.5 Deleted ticket detection If a linked ticket is **deleted in Autotask**: - Backupchecks detects this during polling. - The ticket linkage is marked as: - **Deleted in PSA** UI behaviour: - A clear warning is shown to the operator. - The historical ticket reference remains visible for audit purposes. - Ticket-related actions are blocked until the operator: - Links a replacement ticket, or - Creates a new Autotask ticket ### 11.6 Ticket resolution from Backupchecks (operator-driven) Phase 2 includes implementation of **manual ticket resolution** from Backupchecks under the already defined Phase 1 rules. - Resolution is always an explicit operator action (no automation). - Resolution rules remain leading (see Chapter 6): - Ticket must exist - Ticket must not already be closed - Ticket may only be closed by Backupchecks if **no time entries** exist - If time entries exist, Backupchecks adds an internal system note and leaves the ticket open UI behaviour (Run Checks and Job Details): - Show a Resolve ticket action only when a validated Autotask Ticket ID exists. - When resolution succeeds, update the run to Resolved and store: - Resolved timestamp - Resolved by (operator) - Resolution origin: Resolved by Backupchecks Important alignment with PSA-driven sync: - If Autotask later reports the ticket as Completed, Backupchecks keeps the run resolved, but the origin remains: - Resolved by Backupchecks - If Autotask reports completion before the operator resolves it, Backupchecks sets: - Resolved by PSA ### 11.7 Explicit non-goals (Phase 2) The following remain explicitly out of scope: - Automatic ticket creation - Automatic ticket reopening - Automatic resolution without operator intent - Status pushing from Backupchecks to Autotask (except the explicit Resolve action described above) - Any modification of existing Autotask ticket content (except fixed-format internal system notes used during resolution rules) --- ## 12. Future Design Considerations (Post-Phase 2) The following sections describe **future design intent only**. They are explicitly **out of scope for Phase 2** and introduce no implementation commitments. ### 12.1 Ticket lifecycle awareness (read-only intelligence) Objective: Provide better insight into the state of linked tickets without adding actions. Scope: - Periodic read-only retrieval of ticket status - Display of: - Current status - Queue - Assigned resource (owner) Shown in: - Run Checks - Job Details - Tickets / Remarks overview Explicitly excluded: - No automatic actions - No status synchronisation back to Autotask Value: - Operators need to open Autotask less frequently - Faster visibility into whether a ticket has been picked up ### 12.2 Operator notes & context enrichment Objective: Add contextual information to existing tickets without taking ownership away from the PSA. Scope: - Add internal/system notes from Backupchecks - Notes are always written in a fixed format - Notes are added only by explicit operator action Rules: - Never overwrite existing ticket content - Never create customer-facing notes - Never generate notes automatically Value: - Tickets remain up to date without duplication - Autotask remains the authoritative system ### 12.3 Controlled assistance (semi-automatic support) Objective: Support operator decision-making without introducing automation. Examples: - Suggestion: a similar error already has an open ticket - Suggestion: previous run was successful, consider resolving the ticket - Highlight repeated failures without any linked ticket Important constraints: - Suggestions only - No automatic ticket creation - No automatic ticket closure Value: - Reduced human error - No loss of operator control ### 12.4 Cross-run correlation (analytical) Objective: Provide insight into structural or recurring problems before tickets are created. Scope: - Detection of repeated failures across multiple runs - Detection of the same object with the same error over time - Visualisation inside Backupchecks only Explicitly excluded: - Ticket bundling - Ticket merging - Any Autotask-side modifications Value: - Better decisions prior to ticket creation - Reduced noise in the PSA ### 12.5 Multi-PSA abstraction (design preparation) Objective: Prepare the internal design for future PSA support without implementing it. Scope: - PSA-agnostic internal models: - Ticket - Company mapping - Resolution rules - Autotask remains the only concrete implementation Why this is documented now: - Prevents Autotask-specific technical debt - Keeps the architecture open for other PSA platforms ### 12.6 Governance & audit depth Objective: Ensure full traceability for MSP and enterprise environments. Scope: - Extended audit logging: - Who created, linked or resolved a ticket - When the action occurred - From which run the action originated - Read-only export capabilities - Optional compliance-oriented views Value: - MSP and enterprise readiness - Supports internal and external audits ### 12.7 Explicit non-directions The following are intentionally excluded unless a strategic decision is made later: - Automatic ticket creation - Automatic ticket handling - Time registration - Mutation of existing ticket content - PSA business logic inside Backupchecks