# Flags reference

> Every flag Open ADMS can raise - its code, what raises it, the message a reviewer reads and what it does to the money - grouped as the engine checks them.

Source: /docs/reference/flags/

Every flag the engine can raise, as the reviewer reads it. The codes are a closed set in the
database (`FlagCode`): a flag that isn't on this page doesn't exist. Examples come from the example
world; `<…>` in a real message is filled from the ticket.

**Bills** says what an open flag does to the money: **yes**, the ticket bills as if the flag weren't
there; **that line no**, one line bills nothing and the rest bill; **no**, nothing bills until the
ticket is corrected. Accepting a flag never changes what bills. Every message ends "Flagged for
review." unless it says otherwise. See [Flags, never blocks](/docs/concepts/flags.md) for how a reviewer
handles them.

> [!NOTE]
> **Not a flag**
>
> A second field event of one kind on one ticket is **quarantined** at sync, not flagged. A field
> event waiting for its partner, a preload, GPS accuracy, a scale weight against a load call and a
> driver's licence are never flagged.

## Between a ticket's field events

| Code                               | Raised when                                                                                                                        | Message                                                                           | Bills                                                           |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `DEBRIS_TYPE_MISMATCH`             | The disposal's debris type isn't the exact entry the collection picked (each property's on a split; a haul-out's two the same way) | "Ticket 101008: debris type mismatch (collection Vegetative, disposal C&D)."      | yes: rules read the collection's                                |
| `CERT_NUMBER_MISMATCH`             | The cert numbers on the ticket's events differ, compared exactly                                                                   | "Ticket 101008: truck number doesn't match (collection 730415, disposal 730416)." | yes, from the certification on the event that took the quantity |
| `DISPOSAL_BEFORE_COLLECTION_ENDED` | The disposal started before its collection ended                                                                                   | "Ticket 101008: disposal started 09:12, before its collection ended 09:40."       | yes                                                             |
| `OVERLAPPING_LOADS`                | Two collections on one certification with overlapping loading times and no disposal between; raised on both tickets                | "Ticket 101031: loading 09:10–09:40 overlaps ticket 101030 on truck 730415."      | yes                                                             |
| `SPLIT_SUFFIX_GAP`                 | A bare collection beside suffixed ones, or a gap in the suffixes: a split load's properties, or a split haul-out's piles           | "Ticket 102001: collections -A and -C, no -B."                                    | yes                                                             |
| `CARRIED_COUNT_MISMATCH`           | On a load that carries tickets, the tower's count differs from the tickets the collection lists                                    | "Ticket 101014: tower counted 3 stumps, the collection lists 4."                  | yes, from the tickets carried                                   |

## The certification

| Code                     | Raised when                                                              | Message                                                                                   | Bills                          |
| ------------------------ | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- | ------------------------------ |
| `NO_CERTIFICATION`       | No certification with that number on the project                         | "Ticket 101015: no certification 730499 on this project. Flagged for review; not billed." | no, until one exists           |
| `TYPED_CAPACITY_DIFFERS` | A truck keyed in by hand, its typed capacity unlike the certification's  | "Ticket 101016: capacity typed 60, certified 65."                                         | yes, at the certified capacity |
| `TAG_EXPIRED`            | The certification's tag had expired at the work time                     | "Ticket 101017: review certification 730416 (tag expired 30-Sep-2026)."                   | yes                            |
| `CERTIFICATION_REVOKED`  | The work time is on or after the date the certification was revoked from | "Ticket 101018: review certification 730416 (revoked from 14-Oct-2026)."                  | yes                            |
| `CERTIFICATION_REPLACED` | The work time is after the certification was replaced by a new one       | "Ticket 101019: review certification 730416 (replaced by 730420 on 14-Oct-2026)."         | yes                            |

## Place and time

| Code                         | Raised when                                                                                                              | Message                                                                           | Bills                           |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ------------------------------- |
| `OUTSIDE_PROJECT_BOUNDARY`   | A collection's end GPS, or a unit rate event's GPS, is outside the project boundary                                      | "Ticket 101020: collected outside the project boundary."                          | yes                             |
| `NO_ZONE`                    | Inside the boundary but in no zone (the zone is left empty)                                                              | "Ticket 101021: not inside any zone."                                             | yes                             |
| `OUTSIDE_SITE_AREA`          | A disposal's (or either haul-out end's) end GPS is outside its site's area: the project's circle or the site's own shape | "Ticket 101022: dumped outside Marsh Road TDSR's area."                           | yes                             |
| `PROJECT_NOT_ACTIVE`         | The load's time (its collection's end) is outside the project's active window                                            | "Ticket 101023: project not active on 03-Feb-2027."                               | yes                             |
| `SITE_NOT_YET_ACTIVE`        | A disposal before its site's activation date                                                                             | "Ticket 101024: Marsh Road TDSR not yet active on 10-Oct-2026."                   | yes                             |
| `SITE_CLOSED`                | A disposal after its site's set close date                                                                               | "Ticket 101025: Marsh Road TDSR closed on 01-Dec-2026."                           | yes                             |
| `NO_ROAD_ROUTE`              | The routing server found no road route                                                                                   | "Ticket 101026: no road route found; straight-line distance used."                | yes, at the straight-line miles |
| `DEVICE_CLOCK_OFF`           | The phone's clock differed from the server's at sync by more than the threshold (`.env`)                                 | "Ticket 101008: device clock was 2 h 14 m off at sync."                           | yes                             |
| `WORK_TIME_AFTER_RECEIVED`   | A work time later than the server received the record                                                                    | "Ticket 101008: work time 21:40 is after it was received at 20:15."               | yes                             |
| `WORK_TIME_BEFORE_ENROLMENT` | A work time before its phone was enrolled                                                                                | "Ticket 101027: work time 08:05 is before its phone was enrolled."                | yes                             |
| `DEVICE_TIME_ZONE_DIFFERS`   | The phone's time zone offset isn't the project's at the work time                                                        | "Ticket 101028: phone was on UTC−05:00; the project is on UTC−04:00."             | yes                             |
| `PHONE_OUT_OF_SERVICE`       | Made on a phone after it was taken out of service                                                                        | "Ticket 101008: made on a phone taken out of service."                            | yes                             |
| `TYPED_TICKET_NUMBER`        | The ticket number was typed instead of scanned (a reason was picked)                                                     | "Ticket 101060: typed ticket number (Barcode damaged)."                           | yes                             |
| `BACK_OFFICE_RECORD`         | The back office created the record (person and reason kept)                                                              | "Ticket 101029: record created in the back office by Luis Ortega (Phone failed)." | yes                             |

## Where the debris went

| Code                       | Raised when                                                                                                                                               | Message                                                                                                                    | Bills                                          |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `SITE_DOES_NOT_TAKE_LOADS` | A load dumped at a site not marked _Takes loads_                                                                                                          | "Ticket 101013: dumped at Old Quarry Pit, which isn't marked Takes loads."                                                 | yes                                            |
| `SITE_NOT_FOR_HAUL_OUTS`   | A haul-out leaving a site not marked _Haul-outs leave here_                                                                                               | "Ticket 201003: left Bayline Transfer Station, which isn't marked Haul-outs leave here."                                   | yes                                            |
| `INELIGIBLE_SITE`          | A load dumped at an _Ineligible site_                                                                                                                     | "Ticket 101009: dumped at Old Quarry Pit, an ineligible site."                                                             | yes                                            |
| `TIPPING_FEE_RULE_MISSING` | A load or haul-out **dumped** at a site that _Charges a tipping fee_, with no line for that site's tipping fee pay item. A missing rule, never a mismatch | "Ticket 101011: dumped at Bayline County Landfill, which charges a tipping fee, but no rule on this project gives it one." | yes, its other lines                           |
| `HAUL_OUT_DUMPED_AT_TDSR`  | A haul-out dumped at a site whose type is the built-in TDSR/DMS                                                                                           | "Ticket 201002: a haul-out dumped at Marsh Road TDSR, a TDSR. Flagged for review; not priced."                             | no: the rules are skipped until it's corrected |

## Quantity

| Code                             | Raised when                                                                                                                    | Message                                                                                                                         | Bills                                     |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `LOAD_CALL_ZERO`                 | A load call of 0%, whatever the limits                                                                                         | "Ticket 101032: load call 0%. Flagged for review; not billed."                                                                  | no: 0 CY                                  |
| `LOAD_CALL_LOW`                  | A load call at or under the project's low limit (5% unless changed or off)                                                     | "Ticket 101033: load call 4%."                                                                                                  | yes                                       |
| `LOAD_CALL_HIGH`                 | A load call at or over the project's high limit (95% unless changed or off)                                                    | "Ticket 101003: load call 96%."                                                                                                 | yes                                       |
| `PILE_CALL_NOT_HIGHER`           | On a split haul-out, a pile's load call isn't higher than the call of the pile before it, so what it added can't be worked out | "Ticket 201004: pile -B's load call 30% is not higher than pile -A's 35%. Flagged for review; not billed."                      | no: the piles' shares can't be worked out |
| `QUANTITY_MISSING_FOR_PAY_ITEM`  | A rule's pay item needs a quantity the ticket doesn't have (per ton, no scale weight; a zero net)                              | "Ticket 101012: TIP-FEE-TN-BCL is priced per ton, but the load has no scale weight."                                            | that line no                              |
| `SHARED_SCALE_WEIGHT`            | One scale receipt on two containers' disposals: the weight is split by certified capacity. Raised on both tickets              | "Ticket 101050: one scale weight shared by two containers, split by certified capacity (7.33 of 17.10 tons)."                   | yes, at its share                         |
| `RECEIPT_TWO_DEBRIS_TYPES`       | The tickets on one scale receipt carry different debris types. Raised on both                                                  | "Ticket 101052: scale receipt BCL-88241 covers two debris types (Vegetative, C&D). Flagged for review; its weight is not used." | weight lines no                           |
| `SCALE_WEIGHT_UNUSABLE`          | A receipt's net is below zero, or its gross or tare is missing where the net must be worked out                                | "Ticket 101053: scale receipt BCL-88250 has no usable net weight. Flagged for review; its weight is not used."                  | weight lines no                           |
| `CARRIED_TICKET_NOT_FOUND`       | A carried ticket number (a stump or white goods ticket) matches no ticket                                                      | "Ticket 101014: carried ticket 301099 not found."                                                                               | yes, from the tickets found               |
| `CARRIED_TICKET_ON_ANOTHER_LOAD` | A carried ticket is already on another load                                                                                    | "Ticket 101014: carried ticket 301004 is already on load 101007."                                                               | yes                                       |

## The pay item's settings, and unit rate work

| Code                             | Raised when                                                                                            | Message                                                                           | Bills                              |
| -------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ---------------------------------- |
| `MEASUREMENT_MISSING`            | The pay item has _Measurement required_ and the ticket has none                                        | "Ticket 301010: no measurement."                                                  | yes                                |
| `GPS_MISSING`                    | The pay item has _GPS required_ and the ticket has no GPS                                              | "Ticket 301011: no GPS."                                                          | yes                                |
| `PHOTOS_MISSING`                 | The pay item requires photos and the ticket has none                                                   | "Ticket 301012: no photos."                                                       | yes                                |
| `DECIMAL_COUNT`                  | A count with decimals where the pay item doesn't have _Decimals allowed_                               | "Ticket 301013: count 2.5; HNG-RMV-EA takes whole counts."                        | yes, at the count entered          |
| `NO_SIZE_BAND`                   | A measurement in no size band of its payable type: saved with no pay item                              | "Ticket 301009: 4.5 in fits no Leaners pay item. Flagged for review; not billed." | no                                 |
| `OUTSIDE_SIZE_BAND`              | A payable type's **only** pay item, measured under or over its band                                    | "Ticket 301014: 30.0 in is over HNG-RMV-EA's band (2–24 in)."                     | yes                                |
| `MARKED_INELIGIBLE`              | The monitor marked the work ineligible (where the pay item allows it)                                  | "Ticket 301015: marked ineligible by the monitor."                                | yes                                |
| `STUMP_UNDER_24`                 | A stump under 24 in two feet up                                                                        | "Ticket 301005: not an eligible stump (20 in, under 24 in)."                      | as its band says; with no band, no |
| `ROOT_BALL_NOT_WIDER`            | A stump's root ball isn't wider than the stump (a project check, on by default)                        | "Ticket 301008: root ball (20 in) is not wider than the stump (30 in)."           | yes                                |
| `FILL_WITHOUT_EXPOSED_ROOT_BALL` | A fill line is paid but the root ball isn't half exposed (a project check, on by default)              | "Ticket 301016: fill paid, but the root ball is not half exposed."                | yes                                |
| `ROOT_BALL_MISSING`              | A blank root ball where the stump's pay item requires the measurement                                  | "Ticket 301017: no root ball measurement."                                        | yes; no fill line                  |
| `NO_SURVEY`                      | A stump ticket with no survey number                                                                   | "Ticket 301018: no survey."                                                       | yes                                |
| `CREW_ITEM_OVER_12_HOURS`        | One crew item over 12 hours in the crew's day, its hours added across the day's tickets (project time) | "Ticket 301019: Skid Steer 13.25 h on 13-Oct-2026 for crew 730418 (over 12 h)."   | yes                                |
| `CREW_TIME_OVERLAP`              | Two crew-time tickets for one crew overlap                                                             | "Ticket 301020: crew time 07:00–11:00 overlaps ticket 301007 for crew 730418."    | yes                                |

## Forms, certifications and sites

| Code                          | Raised when                                                                                                                                                                                               | Message                                             | Bills                       |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | --------------------------- |
| `ROE_MISSING`                 | On an ROE project, a collection, unit rate ticket or survey with no ROE                                                                                                                                   | "Ticket 102002: no ROE."                            | yes (on the ticket)         |
| `ROE_NOT_ON_PROJECT`          | Its ROE isn't one of the project's                                                                                                                                                                        | "Ticket 102003: ROE R-0099 is not on this project." | yes (on the ticket)         |
| `ROE_UNSIGNED`                | Its ROE isn't signed                                                                                                                                                                                      | "Ticket 102004: ROE R-0008 is not signed."          | yes (on the ticket)         |
| `ROE_OUT_OF_SCOPE`            | Its ROE has a scope and the work isn't in it: a collection's debris type, or a unit rate ticket's payable type, isn't among the ROE's scope picks. An ROE with no scope picked is never flagged for scope | "Ticket 102005: outside the scope of ROE R-0008."   | yes (on the ticket)         |
| `NO_PRE_WORK_SURVEY`          | A post-work survey with no pre-work survey on its ROE                                                                                                                                                     | "Survey on ROE R-0008: no pre-work survey."         | on the record, not a ticket |
| `CERTIFICATION_PHOTO_MISSING` | A certification without one of its five views                                                                                                                                                             | "Certification 730416: no left side photo."         | on the record, not a ticket |
| `PERMIT_OUTSTANDING`          | A disposal site with no permit                                                                                                                                                                            | "Marsh Road TDSR: permit outstanding."              | on the record, not a ticket |

## Pricing

| Code                           | Raised when                                       | Message                                                                                                         | Bills        |
| ------------------------------ | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------ |
| `NO_PRICING_RULE`              | No rule of the ticket's prime creates a line      | "Ticket 101010: no pricing rule on a Summit contract matches. Flagged for review; not billed."                  | no           |
| `DUPLICATE_TRANSACTION_NUMBER` | Two rules create the same # on one ticket         | "Ticket 301009: two rules create transaction 1 (LNR-RMV-EA-24, LNR-RMV-EA-99). Flagged for review; not billed." | neither line |
| `NO_RATE_FOR_PRIME`            | The pay item has no rate for the prime: a $0 line | "Ticket 101034: pay item VEG-HAUL-CY-15 has no rate for Summit."                                                | that line $0 |
| `RATE_TO_BE_NEGOTIATED`        | The pay item's unit is TBN                        | "Ticket 301021: rate to be negotiated. Not billed yet."                                                         | that line no |

## The engine

| Code            | Raised when                                                                                                | Message                                                                  | Bills |
| --------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ----- |
| `NOT_PROCESSED` | The worker hit an error on this ticket, which has no lines: it is flagged and skipped, and the run goes on | "Ticket 101035: could not be processed. Flagged for review; not billed." | no    |

## A record that should not have been possible

| Code                            | Raised when                                                                                                                                                                                                                                          | Message                                                                                                  | Bills                                |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `DETAIL_MISSING`                | A field event arrived without a detail its kind always records: a load's or a haul-out's debris type at either end; a disposal with no load call, no scale receipt and no count; a haul-out collection's load call; a unit rate event's kind of work | "Ticket 101036: collection has no debris type."                                                          | yes, where an amount can be computed |
| `TYPED_NUMBER_NO_REASON`        | The ticket number was typed instead of scanned and no reason was picked                                                                                                                                                                              | "Ticket 101037: typed ticket number (no reason picked)."                                                 | yes                                  |
| `WRONG_KIND_OF_BADGE`           | A load or a haul-out recorded on a crew's certification, or unit rate work on a container's                                                                                                                                                          | "Ticket 101038: a load recorded on crew certification 730417."                                           | yes, where an amount can be computed |
| `GPS_UNREADABLE`                | The phone sent a GPS fix that can't be one (half a fix, a latitude past 90); the field event was saved without it                                                                                                                                    | "Ticket 101039: GPS unreadable."                                                                         | yes                                  |
| `NOT_A_TICKET_NUMBER`           | The ticket number isn't digits: the field event pairs with nothing until a person renumbers it                                                                                                                                                       | "Ticket 10A040: not a valid ticket number. Flagged for review; not billed."                              | no                                   |
| `ENDED_BEFORE_STARTED`          | A field event's end is before its start                                                                                                                                                                                                              | "Ticket 101041: collection ended 09:10, before it started 09:40."                                        | yes                                  |
| `SPLIT_NOT_ALLOWED`             | A collection with a split suffix on a project whose _Allow split loads_ is off                                                                                                                                                                       | "Ticket 101042: a split load on a project that doesn't allow split loads."                               | yes                                  |
| `OUTSIDE_CONTROL_RANGES`        | On a project numbered from control tickets, a load's or a haul-out's number is in none of the ranges entered for its series                                                                                                                          | "Ticket 109999: number is in none of the project's control ticket ranges."                               | yes                                  |
| `ASSIGNMENT_ON_ANOTHER_PROJECT` | A field event's assignment belongs to a different project from the field event                                                                                                                                                                       | "Ticket 101043: recorded under an assignment on another project."                                        | yes                                  |
| `SCALE_NET_DISAGREES`           | A scale receipt holds a gross, a tare and a net, and the net isn't the gross less the tare. The weights stay as typed, never corrected                                                                                                               | "Ticket 101054: scale receipt BCL-88251's net (17.60 tons) is not its gross less its tare (17.10 tons)." | yes, from the net as written         |
| `TWO_QUANTITIES`                | A load's disposal holds a load call and a scale weight. Which one bills is read from the paying pay item; the two are never compared                                                                                                                 | "Ticket 101055: disposal has both a load call and a scale weight."                                       | yes                                  |

## The engine, on a ticket that was priced before

| Code                        | Raised when                                                                                                                                                        | Message                                                                                        | Bills                          |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- | ------------------------------ |
| `NOT_PROCESSED_LINES_STAND` | The worker hit an error on a ticket that was priced before: nothing of the failed run is kept, so its lines stay as its last good run wrote them until it is fixed | "Ticket 101035: could not be processed. Flagged for review; its lines are as of its last run." | yes, as its last run priced it |

## A certification, read across its project

| Code             | Raised when                                                                                                                                                                                                                                                                                                                             | Message                                                                                        | Bills                            |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------- |
| `SUB_NAME_ALIKE` | A sub it names has a name alike another sub's on the project, once case, spaces, punctuation, a leading The, an ampersand and a company ending (LLC, Inc, Co…) are set aside: perhaps one company spelled two ways. Never which spelling is right; a person corrects the sub on the certification, or accepts the flag as two companies | "Certification 730416: sub “Rivera Trucking Co” looks like “Rivera Trucking” on this project." | both names, the name as compared |

## Who a phone's record names

| Code                           | Raised when                                                                                                                                                                                               | Message                                                                         | Bills |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----- |
| `MONITOR_NOT_SIGNED_IN`        | A phone's field event names a person who, when it arrived, didn't hold that phone over its field time (within the device clock's own allowance), as above. A reviewer who corrects who it names clears it | "Ticket 101044: recorded under Ana Brooks, who wasn't signed in on that phone." | yes   |
| `ASSIGNMENT_OF_ANOTHER_PERSON` | A phone's field event was recorded under an assignment of somebody other than the person it names                                                                                                         | "Ticket 101045: recorded under another person's assignment."                    | yes   |
