> ## Documentation Index
> Fetch the complete documentation index at: https://badixth-dc85e378.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# VRA Maps: Variable-Rate Application Prescriptions

> Build satellite-derived Variable-Rate Application (VRA) prescription maps for fertilizer, seed, and irrigation, and track the full lifecycle from generation to applied verification.

VRA (Variable-Rate Application) maps, also called prescription maps, let you move beyond flat-rate application and put exactly the right amount of fertilizer, seed, or pesticide where the crop needs it, and nowhere else. By grounding application decisions in satellite-derived vegetation indices, you reduce input costs, minimize environmental runoff, and lift yield in areas that have historically underperformed.

<Note>
  Every VRA map has a lifecycle - **generated → reviewed → approved → exported → applied → verified**. Each step emits an event into [Activity & Alerts](/guides/activity-and-alerts) and, once applied, becomes an eligible source event for [Verification](/guides/verification).
</Note>

## Understanding Variable-Rate Application

Variable-Rate Application (VRA) divides a field into **management zones** - groups of pixels with similar index values that represent areas of comparable agronomic status. Each zone receives a different application rate tailored to its needs. A high-biomass zone might receive a maintenance nitrogen rate, while a consistently low-performing zone gets a corrective higher rate to close the yield gap.

Semai automates zone delineation using the vegetation index of your choice, then lets you assign and fine-tune rates per zone before exporting a file your equipment can execute directly.

## What actually validates today

**Read this before the walkthrough below.** Zoning works for every crop. **Rates are the constrained part**, and most of them do not validate against a published band, because for most crop-product pairs no published band exists.

|                                      |                                                                                                                                                                                                                        |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Validated against a sourced band** | Oil palm on **peat** only, and only three products: MOP 4.0 – 6.0, urea 0.5 – 0.6, rock phosphate ceiling 1.0 — all **kg per palm per year** (MPOB–SOPPOA 2016).                                                       |
| **Permitted by attribution**         | Everything else, **provided a named entitled person sets the rate.** `agronomist`, `approver` and `estate_manager` may; `scout` may not. The prescription then shows the rate as attributed, with who set it and when. |
| **Refused**                          | A rate with **neither** a sourced band nor a named author. Restricted products regardless of who signs. Any rate whose unit does not match its band.                                                                   |

<Warning>
  **The three sourced rows are per palm, not per hectare.** A per-hectare rate submitted against them is refused **on the unit**, before any min/max comparison — the numbers are not comparable and converting them silently would be a fabricated figure.
</Warning>

Eleven other crop-product rows are `decision_required` and will stay that way until an agronomist fills them from primary documents. See the [Risk Model](/concepts/risk-model) for the table and the open sourcing questions.

<Info>
  Management zones derived from multi-date imagery composites are more reliable than zones from a single image. Semai automatically uses a seasonal composite when more than three imagery dates are available for the selected season.
</Info>

## Creating a VRA Map

<Steps>
  <Step title="Open the VRA tab">
    Navigate to **Fields**, select your field, and click the **VRA** tab. Any previously created VRA maps for this field are listed here.
  </Step>

  <Step title="Start a new VRA map">
    Click **New VRA Map**. A setup panel opens on the right side of the screen. If you arrived here from a scout completion or risk card, the base index and target hazard are pre-filled.
  </Step>

  <Step title="Choose your base index">
    Select the vegetation index that best matches your application goal:

    * **NDVI** — use for variable seeding rates and general biomass-based zoning
    * **NDRE** — use for variable nitrogen application; more sensitive to chlorophyll at high biomass
    * **NDWI** — use for variable irrigation scheduling or fungicide timing by canopy water status
  </Step>

  <Step title="Set the number of management zones">
    Choose between **2 and 5 management zones**. For most fields, 3 zones (low, medium, high) provide the right balance of spatial detail and practical manageability. The platform auto-clusters pixels using k-means and displays the resulting zone map immediately.
  </Step>

  <Step title="Review and adjust rates per zone">
    The system assigns default relative rates scaled to your base application rate. Edit the rate for each zone to match your agronomic targets. The shape of the table looks like this:

    | Zone            | Index range   | Suggested use case       |
    | --------------- | ------------- | ------------------------ |
    | Zone 1 (low)    | NDRE \< 0.2   | Corrective high nitrogen |
    | Zone 2 (medium) | NDRE 0.2–0.35 | Maintenance rate         |
    | Zone 3 (high)   | NDRE > 0.35   | Reduced maintenance      |

    <Warning>
      **No example rates are printed here, deliberately.** An earlier version of this page showed 150 / 120 / 90 kg/ha with no crop and no product attached. Under the rules above every one of those would be refused — there is no `sourced` band in kg/ha for any crop-product pair — so printing them taught the reader the opposite of how the feature behaves.

      What you enter is validated or attributed per the [table above](#what-actually-validates-today). Rates are authored, never illustrated.
    </Warning>
  </Step>

  <Step title="Submit for review or export">
    A VRA map moves through a review lifecycle before it is applied. Click **Submit for Review** to hand it to an approver, or **Export** directly if you have export permission. See [VRA lifecycle](#vra-lifecycle) below.
  </Step>

  <Step title="Export in your equipment's format">
    Once approved, click **Export**, choose your equipment format (see table below), and download the file. Load the file onto your display or precision ag platform before heading to the field.
  </Step>
</Steps>

## VRA lifecycle

Every VRA map moves through a defined lifecycle. Each step emits an event into [Activity & Alerts](/guides/activity-and-alerts) so operators, agronomists, and (later) verifiers can trace the full history.

| Stage         | Event           | Who acts                                               | Effect                                                                                                                                                      |
| ------------- | --------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Generated** | `map.generated` | System, `agronomist`, `approver` or `estate_manager`   | New map appears in the field's VRA tab. Info-level entry in the feed.                                                                                       |
| **Reviewed**  | `map.reviewed`  | `agronomist`, `approver` or `estate_manager`           | Map opened, zones and rates confirmed. Comments attached.                                                                                                   |
| **Approved**  | `map.approved`  | `approver` or `estate_manager`, **and not the author** | Map is locked and export-enabled. Both names are recorded — see [Approval is a second person](#approval-is-a-second-person).                                |
| **Exported**  | `map.exported`  | Anyone entitled to generate, post-approval             | Machine-format file downloaded. Timestamp and target device recorded.                                                                                       |
| **Applied**   | `map.applied`   | `scout` via as-applied upload, or machinery webhook    | Actual application recorded. Triggers `activity_bindings.map.applied` on any rule card the map targets, which typically **resets severity** on that hazard. |
| **Verified**  | `map.verified`  | System                                                 | Cross-checked against the satellite record for the field and date. Becomes an eligible event for [Verification](/guides/verification) submissions.          |

<Tip>
  A VRA map that stays in **Generated** or **Approved** for more than 5 days on a field entering a critical growth stage is promoted to a MEDIUM alert in the Activity & Alerts feed. Rule cards can declare stricter windows via `activity_bindings`.
</Tip>

### Roles

**Amended 11 August 2026.** An earlier version of this table named **Operator** and **Read-only**, neither of which is one of the eight functional roles in the [role model](/snippets/role-model). This page predates that model and was never reconciled with it. **The permissions were kept; only the role names changed.**

| Role                | Generate | Review | Approve |       Export      | Upload as-applied |
| ------------------- | :------: | :----: | :-----: | :---------------: | :---------------: |
| `scout`             |          |        |         |                   |         ✓         |
| `agronomist`        |     ✓    |    ✓   |         | ✓ (post-approval) |         ✓         |
| `approver`          |     ✓    |    ✓   |    ✓    |         ✓         |         ✓         |
| `estate_manager`    |     ✓    |    ✓   |    ✓    |         ✓         |         ✓         |
| `viewer` (org role) |          |        |         |                   |                   |

Defaults above; role permissions are configurable at the org level.

**Where the old names went, and why.**

**`Operator` → distributed, not renamed.** Its three permissions do not belong to one actor. **Uploading as-applied data is `scout` work** — the role's documented function is *ground-truth work: visits, photos, observations*, and a record of what actually went on the ground is exactly that. **Generating** belongs to `agronomist` and above. **Exporting** is gated on approval and available to anyone in scope who may generate.

**`Read-only` → `viewer`, and its Review tick is removed.** Review is defined in the lifecycle as *"Map opened, zones and rates confirmed. Comments attached."* Attaching a comment is a write. A role that cannot write cannot review, and the old row was internally contradictory. A `viewer` reads every map on this screen and records nothing against it.

**No ninth functional role was added.** The eight are closed by design, and this page inventing a role is the case that rule exists to prevent. **A role governs permission, not identity** — the audit already records `actor` on every write, so the person who exported or applied a map is named regardless of what their role is called.

### Approval is a second person

**The approver may not be the author.** A prescription that one person writes and the same person approves has had a single reader, and it puts fertiliser on the ground.

This mirrors the acknowledgement rule on [findings](/concepts/finding-provenance), and it binds harder here: a finding is a claim, a prescription is an act. It also matters more since **attribution** became a route to a permitted rate — a rate resting on one person's judgement, approved by that same person, is a single unchecked point of decision on a physical operation.

**The fallback, so a small estate is not deadlocked:** where no other entitled person has been active on the estate for 24 hours, approval falls to `estate_manager`, and the record shows it took the fallback route. Where the author *is* the `estate_manager`, approval falls to an in-scope `approver`. **If neither exists, the prescription waits — it is not self-approved.**

`map.approved` records both names: who wrote it and who approved it.

## Export Formats

| Format         | Compatible platform                                     | File extension       |
| -------------- | ------------------------------------------------------- | -------------------- |
| ISO-XML        | John Deere Operations Center, ISOBUS-compliant displays | `.xml`               |
| Shapefile      | AGCO Fuse, CNH AFS, ISOBUS generic                      | `.shp / .dbf / .prj` |
| GeoJSON        | Universal — any GIS-capable platform or custom system   | `.geojson`           |
| As-applied CSV | Data analysis, record-keeping, agronomic reporting      | `.csv`               |

<Note>
  Variable-rate application may be subject to local regulations around maximum nutrient application rates, buffer zones near waterways, and record-keeping requirements. Check with your local agricultural authority or agronomist before executing a prescription map, particularly for nitrogen and pesticide applications.
</Note>

## Reviewing Results After Application

Close the loop by uploading your as-applied data after the application pass is complete. Most precision ag displays export an as-applied shapefile or CSV that records actual rates applied at each GPS point.

To upload as-applied data:

1. Go to the field's **VRA** tab and open the completed map.
2. Click **Upload As-Applied Data** and select your file.
3. Semai overlays the target prescription and the as-applied data side by side, highlighting areas where applied rates deviated from the prescription by more than 10%.

The upload emits `map.applied` into [Activity & Alerts](/guides/activity-and-alerts) with the deviation summary, and starts the cross-check against the next satellite pass. Once the cross-check passes, the entry becomes eligible for [Verification](/guides/verification).

Use the deviation comparison to identify equipment calibration issues, coverage gaps, or overlaps, and carry the findings into your next application planning session.

## Guardrails

This module follows the shared [guardrails template](/snippets/guardrails-template). The agent and every non-agent write path must respect these rules.

| Category                  | Rule                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Input validation**      | Prescription requires: `field_id`, active crop cycle, `index_basis` (NDVI, NDRE, etc.), product, per-zone rates, and unit. Each rate must be **validated** against a `sourced` band **or attributed** to a named entitled author — see [Attribution](/concepts/risk-model#attribution-the-second-route-to-a-permitted-rate). **The unit is checked before the value:** a rate submitted per hectare against a band expressed per palm is refused on the unit, and no min/max comparison is attempted. Zones must cover the target field with no unintentional gaps or overlaps. The advisor may pre-fill a draft from the latest calibration, but **a pre-filled rate has no author** — a person must set or accept it before it can be attributed.                                               |
| **Preconditions**         | Field must have a recent calibration (satellite pass within the cadence declared in the [Crop Cycle Model](/concepts/crop-cycle-models)). Buffer zones near waterways and regulated boundaries must be defined and honored.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| **Refusals**              | Rates outside agronomic min/max. **A rate with neither a sourced band nor a named author** — see [Attribution](/concepts/risk-model#attribution-the-second-route-to-a-permitted-rate). **A rate whose unit does not match its band** — per hectare against a per-palm band is refused on the unit, before any min/max check. **Zoning on a saturated index** — where the base index has saturated it does not discriminate, so the clusters are noise; the refusal names the alternative index rather than producing zones. Missing or expired calibration imagery. Prescriptions on closed cycles. Application inside a regulatory buffer. Agent cannot write prescriptions above the safety floor for restricted products (pesticides, high-nitrogen formulations). **Approval by the author.** |
| **Confirmations**         | Export to machine format (leaves the platform; effectively irreversible). Apply-to-fleet across multiple fields (cross-scope). Edit-after-export. Deletion of a prescription with downstream verification records. Override of the "deviation > 10%" warning on as-applied upload. Drafting, editing, and deleting a pre-export prescription commit optimistically with undo.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **Soft warnings**         | Rates near the top of the agronomic band (not over). Draft on a field that already has a recent active prescription for the same product. Draft during a busy application window for the estate. As-applied deviation between 10-20% (informational; over 20% escalates).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **Rate and scope limits** | Fleet-apply capped at N fields per action (org-configurable) because of external cost and blast radius. Agency-facing exports capped per org tier. No hard cap on drafts or in-platform edits.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Audit**                 | Every prescription is versioned. Log includes actor, source, `index_basis` snapshot, rate table, product, export format, timestamps, and any confirmation acknowledgments. As-applied uploads log deviation summary and the linked satellite cross-check.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **Escalation**            | Deviation > 20% on as-applied cross-check escalates to the estate manager. Failed cross-check against the next satellite pass escalates to agronomy review. Prescriptions rejected at export twice by different reviewers escalate to the org admin.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

## Related

* [Field Scouting](/guides/field-scouting) - a scout completion often triggers a new VRA map, especially for confirmed disease or nutrient hazards.
* [Activity & Alerts](/guides/activity-and-alerts) - every lifecycle event lands in the feed with severity and countdown.
* [Activity Log](/guides/activity-log) - VRA lifecycle rendered as Gantt bars across the season.
* [Risk Model](/concepts/risk-model#activity-bindings) - `map.applied` events reset severity on the targeted rule card.
* [Verification](/guides/verification) - turn applied VRA maps into satellite-stamped proof for subsidy, takaful, and NADMA claims.
* [Fields Workspace](/guides/fields-workspace/overview) - the workspace where a VRA map is typically initiated from an anomaly or rule-card finding.
