{
  "source": "Original filtered ZIP; read only",
  "source_executed": false,
  "files": {
    "backend/routers/calendar.py": {
      "sha256": "91a1f666c8f7c58c8346b61389b2223d23a36699eaf2000dd24350abb4aa9375",
      "ranges": [
        [
          198,
          309
        ],
        [
          311,
          449
        ]
      ]
    },
    "backend/models.py": {
      "sha256": "961ce026b4b7a17ffef8e8d5b35fdc69f4862e9cb81535b1069bb29b2687bbd2",
      "ranges": [
        [
          337,
          390
        ]
      ]
    },
    "frontend/src/components/admin/DashboardDialogs.jsx": {
      "sha256": "ad5c3084851eb295f46df87e68f799855467b00531266834c35750beaac68dd9",
      "ranges": [
        [
          2100,
          2315
        ]
      ]
    },
    "frontend/src/components/admin/CalendarSection.jsx": {
      "sha256": "ee423caefe9a5ccfcaf9c714db32212bc84ea51dc1883cf1cdac49237deffe17",
      "ranges": [
        [
          1,
          40
        ],
        [
          605,
          785
        ]
      ]
    }
  },
  "original_zip_sha256": "d6155e3a2968e6880a99b626be9528a4671a03e34209df480022d0231087fa04",
  "current_implementation": {
    "backend/recurrence.py": {
      "sha256": "87e04327949d0c960092a50063c4704dafbc5abfa744cd84bdfeb96958c85ee7"
    },
    "backend/recurrence_models.py": {
      "sha256": "518ac4f4fe33fe8bab8113ae6003936ad3de37b9773e164956ff42a3cabedf7e"
    },
    "backend/recurrence_dates.py": {
      "sha256": "22aeb747dea28d23afb30aefc22bf74a76a8e1d6ce959fd836671d8e45354f8e"
    },
    "backend/recurrence_plan.py": {
      "sha256": "57c2d62d92e9393f22acc5aed197547a0c74f41b558979a1386005eedc4db01c"
    },
    "backend/recurrence_recovery.py": {
      "sha256": "1ae4a5a184602effe4da53fe8c8406b3baef9abd45e0fe4fb0827f3f3fc35ddf"
    },
    "backend/scheduling.py": {
      "sha256": "44acb3e458dba60f567ce6282f48a16b130c1540e26ed2d08d6f54a8ed792ce9"
    },
    "frontend/src/recurrence.jsx": {
      "sha256": "f0b4ebdc718fd97777f61e4ed4837a23660a2eb286f4a0f3c819d957a4271870"
    },
    "frontend/src/recurrence-rules.js": {
      "sha256": "b0711d588709db4d19c40174bb9d8e327125854c53e5034ceb9238831cf914b5"
    },
    "tests/test_recurrence.py": {
      "sha256": "3fbb42ae7459d1f083ce2613b7c0d4ff3028811de38dc6848b44e045924022b5"
    },
    "tests/test_recurrence_recovery.py": {
      "sha256": "8423345a22c2b0132b54a523ab2a96046e8cfe3d66c16c8e4429bb8758de85f7"
    },
    "tests/test_scheduling.py": {
      "sha256": "7c752d41134578cdbd603a0032e1c90ac24ad389d41126d50bd99208651e5dcf"
    }
  },
  "comparison": [
    {
      "purpose": "Finite repeat planning",
      "original": "Weekly contract days/times, assigned admins and rolling 2/4/6/8/12-week generation; separate source workflows may advertise other recurrence fields.",
      "current": "Exact existing job/customer or unavailable time; named scheduling resources; five finite patterns; explicit UK month and clock policies. Weekly and monthly representative UI scenarios verified."
    },
    {
      "purpose": "Conflict review and generation",
      "original": "Generator creates each nonconflicting date separately; conflict checks use date/start/admin and duration calculations drop minute components. Google calendar sync is queued.",
      "current": "All reviewed ready changes commit together; overlap/time/resource checks, stale preview rejection and stable occurrence identity. External calendar integration is absent."
    },
    {
      "purpose": "Holiday changes and corrections",
      "original": "Holiday cancellation deletes covered calendar records; removing a block invites regeneration. Contract deletion leaves bookings.",
      "current": "Retained exclusions, independent overlapping blocks, cancellation records and overrides; explicit reviewed restoration and definition retirement."
    },
    {
      "purpose": "Commercial parity",
      "original": "SHS/Gilberts specialist rate fields and job/enquiry/personal/admin block types exist in the export.",
      "current": "Generic customer work and unavailability cover this local owner rehearsal. Specialist rates, batch billing, visit-linked field history and remaining source-specific distinctions remain gaps, not agreed exclusions."
    }
  ]
}
