{
  "name": "Pet sitting visit report and intake checklist: the booking totalled",
  "page": "https://otherworldlabs.com/pet-sitter-visit-checklist/",
  "endpoint": "https://otherworldlabs.com/pet-sitter-visit-checklist/api.json",
  "question": "Over one pet-sitting booking, how many of the booked visits were completed, how many of the feedings and medication doses the owner's intake asked for are recorded as given, how much time was spent on site against the time booked, and what is the booking due at the agreed rate?",
  "answers": [
    "visits completed of visits booked, with the share where there is one",
    "feedings and doses given of what the intake asked for, with the share where there is one",
    "minutes on site of minutes booked, with the signed difference",
    "the amount due at the agreed rate, and any visit past the booked count on its own line",
    "the count of visits in each of five states: done as asked, short on care, short on time, not done, not booked"
  ],
  "version": "2026-10-11",
  "licence": "Figures and formulas free to use. No warranty. Arithmetic only; no advice of any kind.",
  "method": "Everything is computed from the figures supplied. Nothing is looked up, nothing is inferred from any medication text, and no figure is filled in for a blank.",
  "currency": "None. Money figures are in the caller's own currency, printed with no symbol, and nothing is converted.",
  "rounding": {
    "counts": "whole. Every count supplied is rounded to the nearest whole with Math.round and reported in a notice when a fraction was sent, so nothing is silently truncated. The minutes derived from an in and an out time are whole minutes by construction. visitsBooked is used at 60 at the most and visitsRecorded at min(66, visitsBooked + 6) at the most, each said out loud in a notice rather than silently. Those two are the ONLY capped inputs: feedingsAsked, dosesAsked and the per-row counts are used as they are handed over, with no cap and no notice, which is what their own notes say.",
    "money": "two decimals by round2(x) = Math.round(x * 100) / 100 on the double, which puts a half toward positive infinity rather than away from zero: -0.125 comes out as -0.12 and not as -0.13. Negative money is not reachable here - the only money figures are a count of visits times a non-negative rate - but the rule is stated because it is the engine's rule. round2 is applied where each figure is defined, so no line is worked from a longer number than the one printed. A SUPPLIED money figure is taken at the cent before it is used, the way rounding.counts puts a supplied count through Math.round: ratePerVisit, the only money figure a caller sends, is put through round2 as it is read, so amountDue and extrasTotal are worked from the rate at the cent and not from a longer rate. Unlike a fractional count, a rate finer than the cent prints NO notice; what it prints instead is the rate it used, in the working beside the total (9 x 22.56 beside 203.04 for a rate of 22.555 over 9 completed visits), so the printed line reconciles to the printed total.",
    "percentages": "every percentage here is DERIVED, never supplied. A share is returned at the fewest decimals, minimum one, that make the percentage reach its own numerator from its own denominator at that numerator's precision; the search runs from one decimal to six, and the figure returned is that rounded percentage rather than the exact quotient, so a reader who recomputes the numerator from it gets the numerator. A share is returned as null, and never above 100, where its denominator is 0 or where its numerator exceeds its denominator."
  },
  "inputs": [
    {
      "name": "visitsBooked",
      "type": "integer",
      "range": "1 to 60, step 1",
      "note": "The visits the booking is for, as the sitter and the owner agreed it. It is the denominator of the visits tally and the number of rows the page prints a state for. A figure above 60 is used at 60 and the engine says so in a notice."
    },
    {
      "name": "minutesBookedPerVisit",
      "type": "integer",
      "range": "5 to 240, step 1",
      "note": "The length of visit the booking is for, in whole minutes. Times visitsBooked it is the minutes the booking owes."
    },
    {
      "name": "ratePerVisit",
      "type": "number",
      "range": "0 to 500, step 0.01",
      "note": "What one visit is charged at, in the caller's own currency. No symbol is assumed, nothing is converted and no rate is recommended. A rate finer than the cent is taken at the cent (round2) as it is read, before it is multiplied by any count, and no notice is printed for it: 22.555 is used as 22.56, which is the rate the printed working shows."
    },
    {
      "name": "feedingsAsked",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The feedings the owner's intake asks for in ONE visit. Times visitsBooked it is the feedings the booking asked for. UNLIKE visitsBooked and visitsRecorded this figure is NOT capped: the page's own control offers 0 to 6, and a caller that posts a larger figure to this endpoint gets that figure used as the denominator, with no cap and no notice. It is stated here because an uncapped input with no notice is the kind of thing an agent reading this file has to be told rather than left to discover."
    },
    {
      "name": "dosesAsked",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The medication doses the owner's intake asks for in ONE visit, counted across every medication the owner named. It is the count the caller entered and is never derived from, checked against or completed from any medication text: this endpoint holds no dose, no range, no schedule and no interval of its own. UNLIKE visitsBooked and visitsRecorded this figure is NOT capped: the page's own control offers 0 to 6, and a caller that posts a larger figure to this endpoint gets that figure used as the denominator, with no cap and no notice."
    },
    {
      "name": "firstVisitDate",
      "type": "string",
      "range": "a date as 2026-10-05, or empty",
      "note": "The date of the first booked visit. With visitsPerDay it dates every row, so a row whose own date is empty is still a dated row. Anything this endpoint cannot read as a date is reported as a date it cannot read; it is never guessed at."
    },
    {
      "name": "visitsPerDay",
      "type": "integer",
      "range": "1 to 6, step 1",
      "note": "How many booked visits fall on one day, which is what turns a row's position into its date."
    },
    {
      "name": "visitsRecorded",
      "type": "integer",
      "range": "0 to 66, step 1",
      "note": "How many of the visits array's rows are a record of a visit. Rows past it are not read. Left out entirely, it is the length of the visits array given, because a list handed over with no count means the list handed over; sent as 0 it is 0, whatever the array holds, because that is the page's own control saying there is no record yet. A booking takes one row per booked visit and six beyond it, so this is used at min(66, visitsBooked + 6) and a larger figure is reported in a notice."
    },
    {
      "name": "visits[].date",
      "type": "string",
      "range": "a date as 2026-10-12, or empty",
      "note": "That visit's own date. Empty takes the date firstVisitDate and visitsPerDay give the row."
    },
    {
      "name": "visits[].inTime",
      "type": "string",
      "range": "a clock reading as 08:15, or empty",
      "note": "The time the sitter arrived. Read only when minutesOnSite is empty."
    },
    {
      "name": "visits[].outTime",
      "type": "string",
      "range": "a clock reading as 08:50, or empty",
      "note": "The time the sitter left. With inTime and no minutesOnSite, the minutes on site are outTime less inTime, plus 1440 where the pair crosses midnight, so the derived figure runs 0 to 1439 and may exceed the 720 the minutes field itself offers; that case is reported in a notice and the derived figure is the one used."
    },
    {
      "name": "visits[].minutesOnSite",
      "type": "integer",
      "range": "0 to 720, step 1",
      "note": "The minutes on site on that visit. Where a visit carries both this and a pair of times, this is the figure used. Empty with no readable pair of times is nothing recorded, which adds nothing to the minutes total and leaves the visit short on time."
    },
    {
      "name": "visits[].feedingsGiven",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The feedings given on that visit. Empty is nothing recorded, which adds nothing to the feedings total and is nothing given against what was asked."
    },
    {
      "name": "visits[].dosesGiven",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The doses given on that visit, recorded as given or not given and never as adjusted. Above dosesAsked it is annotated and is never counted as owed or described as a change."
    },
    {
      "name": "visits[].walk",
      "type": "string",
      "range": "y, n, or empty",
      "note": "Whether the walk the booking asked for was done. Recorded and printed; read by no figure here."
    },
    {
      "name": "visits[].litter",
      "type": "string",
      "range": "y, n, or empty",
      "note": "Whether the litter or the yard was done. Recorded and printed; read by no figure here."
    },
    {
      "name": "visits[].water",
      "type": "string",
      "range": "y, n, or empty",
      "note": "Whether the water was changed. Recorded and printed; read by no figure here."
    },
    {
      "name": "visits[].photo",
      "type": "string",
      "range": "y, n, or empty",
      "note": "Whether a photo was taken. Recorded and printed; read by no figure here."
    },
    {
      "name": "visitDate",
      "type": "string",
      "range": "a date as 2026-10-12, or empty",
      "note": "ONE VISIT, SPELLED FLAT. These ten fields are the visits array's own fields at the top level, and they are read only when no visits array is given: a caller holding a single visit, and the kit checker feeding this engine one line of a visits record, both hold one visit's figures rather than a list, and a record column cannot be mapped onto an array of objects. They produce exactly the state one row of the page reaches. This one is that visit's date."
    },
    {
      "name": "inTime",
      "type": "string",
      "range": "a clock reading as 08:15, or empty",
      "note": "The flat spelling of visits[0].inTime. Read only when no visits array is given."
    },
    {
      "name": "outTime",
      "type": "string",
      "range": "a clock reading as 08:50, or empty",
      "note": "The flat spelling of visits[0].outTime. Read only when no visits array is given."
    },
    {
      "name": "minutesOnSite",
      "type": "integer",
      "range": "0 to 720, step 1",
      "note": "The flat spelling of visits[0].minutesOnSite. Read only when no visits array is given."
    },
    {
      "name": "feedingsGiven",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The flat spelling of visits[0].feedingsGiven. Read only when no visits array is given."
    },
    {
      "name": "dosesGiven",
      "type": "integer",
      "range": "0 to 6, step 1",
      "note": "The flat spelling of visits[0].dosesGiven. Read only when no visits array is given."
    },
    {
      "name": "walk",
      "type": "string",
      "range": "y, n, or empty",
      "note": "The flat spelling of visits[0].walk. Read only when no visits array is given, and read by no figure."
    },
    {
      "name": "litter",
      "type": "string",
      "range": "y, n, or empty",
      "note": "The flat spelling of visits[0].litter. Read only when no visits array is given, and read by no figure."
    },
    {
      "name": "water",
      "type": "string",
      "range": "y, n, or empty",
      "note": "The flat spelling of visits[0].water. Read only when no visits array is given, and read by no figure."
    },
    {
      "name": "photo",
      "type": "string",
      "range": "y, n, or empty",
      "note": "The flat spelling of visits[0].photo. Read only when no visits array is given, and read by no figure."
    },
    {
      "name": "totalVisitsCompleted",
      "type": "integer",
      "range": "0 to 66, step 1",
      "note": "The other way in: for a sitter who kept one total for the booking and no per-visit record. All four totals must be present together, and they are read only when visitsRecorded is 0."
    },
    {
      "name": "totalFeedingsGiven",
      "type": "integer",
      "range": "0 to 396, step 1",
      "note": "The feedings given over the whole booking. Read with the other three totals only."
    },
    {
      "name": "totalDosesGiven",
      "type": "integer",
      "range": "0 to 396, step 1",
      "note": "The doses given over the whole booking. Read with the other three totals only."
    },
    {
      "name": "totalMinutesOnSite",
      "type": "integer",
      "range": "0 to 47520, step 1",
      "note": "The minutes on site over the whole booking. Read with the other three totals only."
    }
  ],
  "outputs": [
    {
      "name": "recordSource",
      "unit": "rows, totals or null",
      "formula": "\"rows\" where at least one visit row is read, \"totals\" where the four booking totals are read instead, null where the booking is not complete enough to total. The two are alternatives and never a sum: where both are present the rows are used, which is said in a notice."
    },
    {
      "name": "visitsCompleted",
      "unit": "visits",
      "formula": "min(visitsRecorded, visitsBooked) on the rows path, min(totalVisitsCompleted, visitsBooked) on the totals path."
    },
    {
      "name": "visitsNotDone",
      "unit": "visits",
      "formula": "max(0, visitsBooked - the visits the record holds)."
    },
    {
      "name": "extraVisits",
      "unit": "visits",
      "formula": "max(0, the visits the record holds - visitsBooked): visits recorded past the end of the booking."
    },
    {
      "name": "visitsSharePct",
      "unit": "per cent or null",
      "formula": "visitsCompleted / visitsBooked x 100, at the fewest decimals (minimum one) that reach visitsCompleted from visitsBooked. null where visitsBooked is 0 or where the numerator exceeds it."
    },
    {
      "name": "feedingsAskedTotal",
      "unit": "feedings",
      "formula": "feedingsAsked x visitsBooked."
    },
    {
      "name": "feedingsGivenTotal",
      "unit": "feedings",
      "formula": "the sum of visits[].feedingsGiven over the rows read, a blank counting as nothing; totalFeedingsGiven on the totals path."
    },
    {
      "name": "feedingsSharePct",
      "unit": "per cent or null",
      "formula": "feedingsGivenTotal / feedingsAskedTotal x 100, same rule as visitsSharePct. null where the asked total is 0 or where the given total exceeds it."
    },
    {
      "name": "dosesAskedTotal",
      "unit": "doses",
      "formula": "dosesAsked x visitsBooked."
    },
    {
      "name": "dosesGivenTotal",
      "unit": "doses",
      "formula": "the sum of visits[].dosesGiven over the rows read, a blank counting as nothing; totalDosesGiven on the totals path."
    },
    {
      "name": "dosesSharePct",
      "unit": "per cent or null",
      "formula": "dosesGivenTotal / dosesAskedTotal x 100, same rule. null where the asked total is 0 or where the given total exceeds it."
    },
    {
      "name": "minutesBookedTotal",
      "unit": "minutes",
      "formula": "minutesBookedPerVisit x visitsBooked."
    },
    {
      "name": "minutesOnSiteTotal",
      "unit": "minutes",
      "formula": "the sum of each row's minutes on site over the rows read, a blank counting as nothing; totalMinutesOnSite on the totals path."
    },
    {
      "name": "minutesDifference",
      "unit": "minutes, signed",
      "formula": "minutesOnSiteTotal - minutesBookedTotal. The one signed figure here: negative where less time is recorded than was booked."
    },
    {
      "name": "minutesSharePct",
      "unit": "per cent or null",
      "formula": "minutesOnSiteTotal / minutesBookedTotal x 100, same rule. null where the booked total is 0 or where the on-site total exceeds it, in which case minutesDifference is positive."
    },
    {
      "name": "amountDue",
      "unit": "money, 2dp",
      "formula": "visitsCompleted x the rate at the cent (ratePerVisit put through round2 as it is read, before it is multiplied), rounded to the cent. A visit short on care or short on time is still a completed visit at the agreed rate: no deduction, no penalty and no refund is computed."
    },
    {
      "name": "extrasTotal",
      "unit": "money, 2dp",
      "formula": "extraVisits x the rate at the cent (the same round2 of ratePerVisit amountDue is worked from), rounded to the cent, reported on its own and never added into amountDue."
    },
    {
      "name": "countDoneAsAsked",
      "unit": "visits or null",
      "formula": "the visits where the record shows every asked feeding and dose given and the time on site at or above the booked length. null on the totals path, where a total cannot be split into visits."
    },
    {
      "name": "countShortOnCare",
      "unit": "visits or null",
      "formula": "the visits that happened where at least one asked feeding or dose is not recorded as given. null on the totals path."
    },
    {
      "name": "countShortOnTime",
      "unit": "visits or null",
      "formula": "the visits that happened with all the asked care given and the time on site under the booked length. null on the totals path."
    },
    {
      "name": "countNotDone",
      "unit": "visits or null",
      "formula": "the booked visits with no row against them. null on the totals path."
    },
    {
      "name": "countNotBooked",
      "unit": "visits or null",
      "formula": "the recorded visits past the end of the booking. null on the totals path."
    },
    {
      "name": "dosesOverAskedTotal",
      "unit": "doses",
      "formula": "max(0, dosesGivenTotal - dosesAskedTotal). Reported, never counted as owed."
    },
    {
      "name": "feedingsOverAskedTotal",
      "unit": "feedings",
      "formula": "max(0, feedingsGivenTotal - feedingsAskedTotal). Reported, never counted as owed."
    },
    {
      "name": "rowsWithABlank",
      "unit": "visits",
      "formula": "the rows read that leave the minutes, the feedings or the doses blank. 0 on the totals path."
    },
    {
      "name": "rowsNotDated",
      "unit": "visits or null",
      "formula": "the visits the table PRINTS - booked or recorded, which is max(visitsBooked, the rows read) capped at 66 - carrying no date this engine can read. A booked visit with no row of its own takes the date firstVisitDate and visitsPerDay give its position, so such a visit is undated only where firstVisitDate is not a date this engine can read, and then every printed row with no date of its own is undated with it. This field, unlike rowsWithABlank and rowsFromTimePair, is NOT scoped to the rows read. They sort after the dated ones, in the order they were given. null on the totals path."
    },
    {
      "name": "rowsFromTimePair",
      "unit": "visits or null",
      "formula": "the rows whose minutes on site came from an in and an out time rather than from the minutes field. null on the totals path."
    }
  ],
  "formula": [
    "1. A field is entered when it is present and reads as a finite number; a blank is not a nought. A rate of 0 and a feedings count of 0 are figures a booking may really carry, so neither is read as a blank.",
    "2. The booking line is complete when visitsBooked is at least 1, minutesBookedPerVisit is at least 1, visitsPerDay is at least 1, ratePerVisit, feedingsAsked and dosesAsked are entered, and firstVisitDate is not blank.",
    "3. The record is complete when either visitsRecorded is at least 1 or all four booking totals are entered. Until the booking line AND the record are complete, every output is null and the page prints no figure.",
    "4. rowsOffered = min(66, visitsBooked + 6); visitsRecorded is used at that figure at the most.",
    "5. A row's minutes on site = its minutesOnSite where that is entered; otherwise outTime less inTime, plus 1440 where that is negative, where both times are readable; otherwise nothing recorded.",
    "6. A row's date = its own date where that reads as a date; otherwise the date firstVisitDate + floor(row index / visitsPerDay) days where firstVisitDate is readable and the row's own date is blank; otherwise no date this engine can read.",
    "7. feedingsAskedTotal = feedingsAsked x visitsBooked. dosesAskedTotal = dosesAsked x visitsBooked. minutesBookedTotal = minutesBookedPerVisit x visitsBooked.",
    "8. On the rows path, feedingsGivenTotal, dosesGivenTotal and minutesOnSiteTotal are the sums over the rows read, a blank adding nothing. On the totals path they are the three totals supplied.",
    "9. visitsCompleted = min(the visits the record holds, visitsBooked). visitsNotDone = max(0, visitsBooked - the visits the record holds). extraVisits = max(0, the visits the record holds - visitsBooked).",
    "10. A share = pct(numerator / denominator x 100) where denominator > 0 and numerator <= denominator, at the fewest decimals that reach the numerator; otherwise null.",
    "11. minutesDifference = minutesOnSiteTotal - minutesBookedTotal, signed.",
    "12. rate = round2(ratePerVisit), the supplied rate taken at the cent as it is read. amountDue = round2(visitsCompleted x rate). extrasTotal = round2(extraVisits x rate), on its own and never added in. For ratePerVisit 22.555 and visitsCompleted 9 that is round2(9 x 22.56) = 203.04, not round2(9 x 22.555) = 203.00.",
    "13. The five states, by this precedence so no visit falls into two: a row past visitsBooked is NOT BOOKED; a booked visit with no row is NOT DONE; a row where an asked feeding or dose is not recorded as given is SHORT ON CARE; a row with all the asked care given and minutes under the booked length is SHORT ON TIME; anything else is DONE AS ASKED.",
    "14. A blank where the booking line asked for a figure counts as nothing given, in the tally and in the state, which is what keeps the two from printing different answers about one visit. The count of rows carrying such a blank is returned.",
    "15. dosesOverAskedTotal = max(0, dosesGivenTotal - dosesAskedTotal); the same for feedings. Neither is counted as owed, deducted, or described as a change to anything.",
    "16. The rows are printed in date order: dated visits by their date, then the undated in the order they were given. rowsNotDated is counted over every visit the table prints, max(visitsBooked, the rows read) capped at 66, and not over the rows read: a booked visit with no row of its own is dated from firstVisitDate and visitsPerDay, so it is undated exactly where firstVisitDate is unreadable."
  ],
  "identities": [
    "countDoneAsAsked + countShortOnCare + countShortOnTime + countNotDone + countNotBooked = max(visitsBooked, the rows read), the rows the table prints, on the rows path.",
    "visitsCompleted + visitsNotDone = visitsBooked whenever extraVisits is 0, and visitsCompleted = visitsBooked whenever extraVisits is above 0.",
    "amountDue = round2(visitsCompleted x round2(ratePerVisit)) and is never negative.",
    "minutesDifference = minutesOnSiteTotal - minutesBookedTotal.",
    "Every share returned is between 0 and 100 inclusive, or null.",
    "dosesOverAskedTotal is 0 whenever dosesSharePct is not null, and dosesSharePct is null whenever dosesOverAskedTotal is above 0."
  ],
  "example": {
    "inputs": {
      "visitsBooked": 10,
      "minutesBookedPerVisit": 30,
      "ratePerVisit": 22.5,
      "feedingsAsked": 2,
      "dosesAsked": 1,
      "firstVisitDate": "2026-10-05",
      "visitsPerDay": 1,
      "visitsRecorded": 9,
      "totalVisitsCompleted": null,
      "totalFeedingsGiven": null,
      "totalDosesGiven": null,
      "totalMinutesOnSite": null,
      "visits": [
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 32,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 30,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "n"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 25,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 30,
          "feedingsGiven": 1,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 35,
          "feedingsGiven": 2,
          "dosesGiven": 0,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 30,
          "feedingsGiven": 2,
          "dosesGiven": 2,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "n"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 30,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "n",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "08:15",
          "outTime": "08:50",
          "minutesOnSite": null,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "y",
          "water": "y",
          "photo": "y"
        },
        {
          "date": "",
          "inTime": "",
          "outTime": "",
          "minutesOnSite": 30,
          "feedingsGiven": 2,
          "dosesGiven": 1,
          "walk": "y",
          "litter": "n",
          "water": "y",
          "photo": "y"
        }
      ]
    },
    "outputs": {
      "recordSource": "rows",
      "visitsCompleted": 9,
      "visitsNotDone": 1,
      "extraVisits": 0,
      "visitsSharePct": 90,
      "feedingsAskedTotal": 20,
      "feedingsGivenTotal": 17,
      "feedingsSharePct": 85,
      "dosesAskedTotal": 10,
      "dosesGivenTotal": 9,
      "dosesSharePct": 90,
      "minutesBookedTotal": 300,
      "minutesOnSiteTotal": 277,
      "minutesDifference": -23,
      "minutesSharePct": 92.3,
      "amountDue": 202.5,
      "extrasTotal": 0,
      "countDoneAsAsked": 6,
      "countShortOnCare": 2,
      "countShortOnTime": 1,
      "countNotDone": 1,
      "countNotBooked": 0,
      "dosesOverAskedTotal": 0,
      "feedingsOverAskedTotal": 0,
      "rowsWithABlank": 0,
      "rowsNotDated": 0,
      "rowsFromTimePair": 1
    }
  },
  "not_covered": [
    "Anything about the medication itself: this endpoint holds no dose, no range, no typical amount, no schedule and no interval, reads nothing from any medication text, and says nothing about an unwell animal beyond contacting the owner and the vet the owner named.",
    "A waiver, a release, a cancellation policy, a contract, an authorisation to treat, an insurance or bonding statement, or any other legal document or clause.",
    "Whether the record is true. It totals what it is given.",
    "Any deduction, penalty, refund or discount for a visit short on care or short on time. The shortfall is reported; the money is not changed.",
    "The per-visit note and the four ticks (walk, litter, water, photo): recorded and printed, read by no figure.",
    "Keys, alarm codes, gate codes and the owner's travel dates. There is no field for any of them.",
    "Any comparison with a marketplace, a pet-sitting software product or a printable, and any rate, price or market figure."
  ],
  "no_advice": "This endpoint returns arithmetic on figures supplied to it. It recommends no rate, no booking and no course of action, gives no instruction about any animal's care or medication, and is not a legal document of any kind."
}
