{
  "$comment": "Contract A4 PRACTICE items for the ashr-partner-l2 track, domain data-imports. Published, for lesson quizzes and lab preparation. The secured theory exam is NOT drawn from this file. Every item cites the ASHR.work pages it is grounded in (`cites`) and the repo files the facts were read from (`sources`). No item quotes a price and no item carries customer data.",
  "track": "ashr-partner-l2",
  "domain": "data-imports",
  "items": [
    {
      "id": "ashr-partner-l2.data-imports.01",
      "kind": "multi",
      "domain": "data-imports",
      "stem": "Which entity types can be imported from Admin → Import data? Select all that apply.",
      "options": [
        {
          "key": "a",
          "text": "Employees"
        },
        {
          "key": "b",
          "text": "Leave balances"
        },
        {
          "key": "c",
          "text": "Holidays"
        },
        {
          "key": "d",
          "text": "Assets"
        },
        {
          "key": "e",
          "text": "Salary structures"
        },
        {
          "key": "f",
          "text": "The org chart"
        },
        {
          "key": "g",
          "text": "Payroll history"
        }
      ],
      "answer_key": {
        "correct": [
          "a",
          "b",
          "c",
          "d",
          "e",
          "f"
        ]
      },
      "max_points": 2,
      "rationale": "Six importers; payroll history has no importer and support cannot turn one on early.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "content/help/admin/import.mdx",
        "lib/import/importers/employees.ts",
        "lib/import/importers/leave-balances.ts",
        "lib/import/importers/holidays.ts",
        "lib/import/importers/assets.ts",
        "lib/import/importers/salary-structures.ts",
        "lib/import/importers/org-chart.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.02",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "In what order should you run the imports for a new tenant?",
      "options": [
        {
          "key": "a",
          "text": "Org chart first, then employees"
        },
        {
          "key": "b",
          "text": "Employees first, because leave balances, salary structures, the org chart and asset assignments refer to people by email"
        },
        {
          "key": "c",
          "text": "Order does not matter for any import"
        },
        {
          "key": "d",
          "text": "Salary structures first, so payroll is ready"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "A manager or assignee email that matches nobody yet is only a warning, but it leaves a link to fix by hand afterwards.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "content/help/admin/import.mdx",
        "lib/import/importers/employees.ts",
        "lib/import/importers/leave-balances.ts",
        "lib/import/importers/holidays.ts",
        "lib/import/importers/assets.ts",
        "lib/import/importers/salary-structures.ts",
        "lib/import/importers/org-chart.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.03",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "Why is it safe to re-upload a corrected file?",
      "options": [
        {
          "key": "a",
          "text": "Because each upload deletes the previous import first"
        },
        {
          "key": "b",
          "text": "Because every importer matches rows by a natural key — employee email; email, leave type and year; holiday date and name; asset tag; email and effective date; the employee's email for the org chart — so a re-run updates the same records instead of duplicating them"
        },
        {
          "key": "c",
          "text": "Because duplicates are cleaned up nightly"
        },
        {
          "key": "d",
          "text": "It is not safe; each file can be uploaded once"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "A corrected re-upload is the normal way to finish an import.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "content/help/admin/import.mdx",
        "lib/import/importers/employees.ts",
        "lib/import/importers/leave-balances.ts",
        "lib/import/importers/holidays.ts",
        "lib/import/importers/assets.ts",
        "lib/import/importers/salary-structures.ts",
        "lib/import/importers/org-chart.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.04",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "The holiday file has two different holidays on the same date. What happens to the second row?",
      "options": [
        {
          "key": "a",
          "text": "Both are imported"
        },
        {
          "key": "b",
          "text": "It is skipped with a message: an organisation can have only one holiday on a given date, so a same-date, different-name row is a conflict the importer will not resolve silently"
        },
        {
          "key": "c",
          "text": "The first holiday is overwritten"
        },
        {
          "key": "d",
          "text": "The whole file fails"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "Same date and same name is the idempotent re-run case; same date and a different name is a genuine conflict.",
      "cites": [
        "https://ashr.work/help/admin/import",
        "https://ashr.work/help/holidays/holiday-calendar"
      ],
      "sources": [
        "lib/import/importers/holidays.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.05",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "An org-chart row would make A report to B while B already reports, through C, to A. What does the importer do?",
      "options": [
        {
          "key": "a",
          "text": "Imports it and lets the admin fix the loop later"
        },
        {
          "key": "b",
          "text": "Refuses that row as a hard skip, because a reporting loop would corrupt every manager-scoped view"
        },
        {
          "key": "c",
          "text": "Breaks the loop by removing C's manager"
        },
        {
          "key": "d",
          "text": "Imports it with a warning"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "The importer checks for transitive cycles both in the dry run and at commit.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "lib/import/importers/org-chart.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.06",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "What does the leave-balances import change on an existing balance?",
      "options": [
        {
          "key": "a",
          "text": "Everything, including days already used"
        },
        {
          "key": "b",
          "text": "The allocated days and, optionally, the carried-forward days; it never touches used or pending, which belong to the leave workflow"
        },
        {
          "key": "c",
          "text": "Only the pending days"
        },
        {
          "key": "d",
          "text": "It deletes the balance and recreates it"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "Opening balances come from the customer's spreadsheet; workflow state stays with the leave module.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "lib/import/importers/leave-balances.ts",
        "content/help/admin/import.mdx"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.07",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "You are importing 40 synthetic employees into a sandbox whose plan allows 10 users. What should you do with the send_invite column?",
      "options": [
        {
          "key": "a",
          "text": "Leave it blank so everyone is invited"
        },
        {
          "key": "b",
          "text": "Set it to false for people who need a record but no login: invites run through the same seat-limit check as a hand-typed invite, so rows past the limit come back skipped, and synthetic addresses should never be emailed"
        },
        {
          "key": "c",
          "text": "Delete the column from the template"
        },
        {
          "key": "d",
          "text": "Set it to true and raise the seat limit yourself"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "A blank send_invite defaults to true. People on record without a login are not seats.",
      "cites": [
        "https://ashr.work/help/admin/import",
        "https://ashr.work/help/admin/referred-by-a-partner"
      ],
      "sources": [
        "content/help/admin/import.mdx",
        "lib/import/importers/employees.ts",
        "lib/billing/nfr-plan.ts"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.08",
      "kind": "mcq",
      "domain": "data-imports",
      "stem": "In the dry run, one row has an invalid date and another has a manager_email that matches nobody yet. What happens if you try to commit?",
      "options": [
        {
          "key": "a",
          "text": "Both rows import"
        },
        {
          "key": "b",
          "text": "Commit stays disabled while the invalid-date error is outstanding; once fixed, the manager_email row imports with a warning you confirm, and you set the link afterwards"
        },
        {
          "key": "c",
          "text": "Both rows are dropped and the rest commit"
        },
        {
          "key": "d",
          "text": "The importer guesses the date"
        }
      ],
      "answer_key": {
        "correct": [
          "b"
        ]
      },
      "max_points": 1,
      "rationale": "Errors drop a row until it is fixed in the file; warnings import, flagged.",
      "cites": [
        "https://ashr.work/help/admin/import"
      ],
      "sources": [
        "content/help/admin/import.mdx"
      ]
    },
    {
      "id": "ashr-partner-l2.data-imports.09",
      "kind": "scenario",
      "domain": "data-imports",
      "stem": "A customer is moving from another HRMS. Describe how you migrate the six importable entity types so that no rejected row is left unexplained, and what you do about data the importers do not cover.",
      "rubric": {
        "criteria": [
          "downloads each template from Admin → Import data and maps the old system's export to it, keeping the header names",
          "imports employees first and the email-linked types after",
          "reads every dry run, fixes errors in the file and re-uploads, relying on natural keys so re-runs do not duplicate",
          "sets send_invite deliberately and accounts for seat-limit skips",
          "produces a written list explaining every skipped or warned row and its resolution",
          "states that payroll history has no importer and offers the guided migration add-on or another agreed approach, without promising an importer"
        ],
        "max_points": 6
      },
      "max_points": 6,
      "cites": [
        "https://ashr.work/help/admin/import",
        "https://ashr.work/help/faqs/pricing-and-plans",
        "https://ashr.work/migrate-from"
      ],
      "sources": [
        "content/help/admin/import.mdx",
        "content/help/faqs/pricing-and-plans.mdx",
        "content/marketing/migrate-from/systems.json",
        "lib/import/importers/employees.ts",
        "lib/import/importers/leave-balances.ts",
        "lib/import/importers/holidays.ts",
        "lib/import/importers/assets.ts",
        "lib/import/importers/salary-structures.ts",
        "lib/import/importers/org-chart.ts"
      ]
    }
  ]
}
