Skip to main content
A Season in the platform is one crop cycle bound to a Field. But “one cycle” means different things for different crops. Rice runs two short cycles per year. Oil palm runs one continuous 25-year producing life. Pineapple runs rolling batches that never share a boundary. If we treat all of them the same way, the analytics, rule cards, and rollups produce nonsense. This page is the canonical reference for how each crop cycles, what a Season means for that crop, and which vocabulary the UI uses. Every other page that touches Season inherits from this one.

Why cycle model matters

Three things depend on getting the cycle right:
  1. Comparability. Cycle Analysis can only compare like-for-like. Rice Main Season vs Rice Off Season is apples to oranges (different water regime, different pest pressure, different yield ceiling). Same crop, same Season Type, aligned by phenology week is the honest comparison.
  2. Rule cards. The Risk Model phenology clock only makes sense inside a cycle. A rule card with stage_window: booting needs a defined planting date to know when booting is. Some rules are also Season-Type specific; bacterial leaf blight pressure is higher in the Off Season, and a rule card can filter for that.
  3. Verification and rollups. One Season is usually one Verification bundle boundary for cyclical crops. For perennials the bundle boundary is a calendar period (month or quarter). Aggregation rollups can slice by Season Type so estate managers can compare Main to Main across years.

The three cycle families

Every supported crop maps to exactly one of these families.

Cyclical

Discrete cycles with a planting date and a harvest date. Multiple cycles can happen per calendar year. Each cycle is one Season.Examples: rice, corn, groundnut, most vegetables.

Perennial

One long producing life (years to decades). No planting-to-harvest cycle in the annual sense. Instead, the year is the container, and shorter internal cycles (flowering cohorts, tapping panels) live inside it.Examples: oil palm, rubber, coconut, cocoa.

Rolling continuous

Planting happens continuously through the year. Each batch has its own multi-month cycle. Batches at different ages coexist on the same Field or Estate.Examples: pineapple, banana, papaya, nursery operations.
The cycle family is set at the crop level and inherited by every Field of that crop. It drives the Season Type vocabulary the UI offers, the default comparison mode in Cycle Analysis, and the Verification cadence.

Cycle vocabulary by crop

The Season Type dropdown in the Fields Workspace changes by crop. Use these tables as the source of truth for what each term means.

Rice (cyclical)

Malaysian rice runs on a two-season calendar dictated by the monsoon and by irrigation authority schedules (MADA in Kedah, KADA in Kelantan). A single Field runs two Seasons per year in most granaries. Comparison rule: compare Main to Main and Off to Off across years. Never compare Main to Off directly; the yield delta is structural, not agronomic. Season label pattern: Main Season 1 · 2026, Off Season 2 · 2026. The number represents the cycle index within the year (1 = first, 2 = second), which matters when an unusual year has three cycles.

Oil Palm (perennial)

Oil palm has no traditional season. A single planting yields for 20-25 years, harvested every 10-14 days on a rotation. Fresh Fruit Bunches (FFB) are the harvested unit; downstream mills convert FFB to CPO (crude palm oil) at 20-23% Oil Extraction Rate (OER). Comparison rule: compare Production Year to Production Year at the same Tree Age Cohort. A 2018-planted block at year 7 compares to a 2019-planted block at year 7, not to itself last year (age differs by one year, which materially changes yield potential). Season label pattern: Production Year 2026, with a Tree Age Cohort chip like Planted 2018 · Age 8 for context.

Rubber (perennial)

Rubber is tapped daily or every-other-day; a shallow spiral cut in the bark releases latex overnight into a cup. Bark is organized into panels (A, B, C, D); each panel is tapped for ~5 years then rotated so the tree can regenerate. Comparison rule: compare Production Year to Production Year on the same Tapping Panel and same Tapping Cycle. Comparing d/2 tapped Panel B to d/3 tapped Panel C is meaningless. Season label pattern: Production Year 2026 · Panel B · d/3.

Pineapple (rolling continuous)

Pineapple is planted continuously through the year. Each Planting Batch has its own 14-24 month cycle. Multiple batches at different ages coexist on the same Field or Estate. Flowering is induced (forcing) with ethephon or calcium carbide. Comparison rule: compare batches at the same age from planting, not the same calendar date. Batch A planted January vs Batch B planted April both at their 12-month mark tells you if the field is trending; comparing them on the same calendar day compares different growth stages. Season label pattern: Batch 2026-A · Plant Crop or Batch 2025-B · Ratoon 1.

How cycle model interacts with phenology

Cycle model and phenology work together but describe different things. The X-axis fix. When Cycle Analysis compares two Seasons, it aligns them by phenology week (days since planting expressed in weeks), not calendar week. Week 8 of Main 2024 is booting, and week 8 of Main 2025 is booting, always. Comparing calendar week 24 across years compares different biological stages and is misleading.

How cycle model interacts with rule cards

All Risk Model rule cards run inside a Season. Three cycle-related fields matter:
When to set season_type_filter: the hazard behaves differently across Season Types. Bacterial leaf blight is a good example; humid warm nights of the Off Season make it substantially more likely than in Main Season, so a rule card can gate on that. When to skip both filters: the hazard is season-independent (most drought, most nutrient stress). Leave them unset; the rule fires wherever phenology matches.

How cycle model interacts with Verification and rollups

Verification bundle boundary: See Verification for the full evidence bundle spec. Aggregation rollups:
  • Cyclical crops roll up per Season Type per year (Main 2026, Off 2026 as separate slices).
  • Perennials roll up per Production Year, with an optional Tree Age Cohort filter.
  • Rolling continuous rolls up per Batch cohort (e.g., all Q1-2026 batches).
See Aggregation Model for how confidence and k-anonymity apply to these slices.