Decentralised News · Editorial by Heath Muchena · Evidence reviewed 12 November 2026 · Edition 1.0
What Matters
A weather-index payout can follow its contract exactly while failing to match a farmer’s loss. The decisive questions are which place, period, dataset version and trigger the contract uses. DN’s local calculator shows payout sensitivity and a supplied loss gap under one explicit formula. It does not measure oracle accuracy, price insurance or establish a claim.
DN Evidence Block
Source-backed: IFC’s basis-risk explanation, primary rainfall-product documentation, USDA rainfall-index materials and Columbia IRI’s research description. Original DN work: a contract-input checklist and a capped linear trigger calculator. Not measured: farm yields, ground rainfall, oracle errors, insurer claims outcomes or production smart contracts. Every worked amount and rainfall value below is illustrative. Sources reviewed 12 November 2026.
The oracle can deliver the right number for the wrong question
Suppose an agent administers a rainfall policy. The data arrives on time, its identifier matches the contract and the settlement calculation runs correctly. The farm still suffers a loss that the payment does not cover. No contradiction is necessary: a weather index and an individual farm’s loss are different objects.
IFC describes basis risk as a mismatch between index measurements and an insured person’s actual losses. Product design and geography both matter; rainfall totals can also conceal a damaging dry spell during a crop’s sensitive stage. This is a reason to examine the policy’s relationship to the exposure, not merely the speed of data delivery. [1]
DN’s financial-oracle article concerns price-feed delivery. The physical-data evidence test asks what supports a signed sensor reading. Here, the additional decision is contractual: how does the specified weather input become a payout, and how does that payout compare with the loss the buyer cares about?
Separate four promises before automating settlement
| Claim | Evidence needed | What remains unresolved |
|---|---|---|
| The message came from the stated source | Source identity, authentication and message integrity | Whether its weather estimate represents the farm |
| The correct contract input was used | Dataset, version, location, interval and revision policy | Whether that input tracks the insured loss |
| The payout formula ran correctly | Contract parameters, arithmetic and settlement record | Whether the resulting payment is sufficient |
| The product protects this exposure | Policy terms and relevant loss/index evidence | Future outcomes and losses outside the defined protection |
These promises can fail independently. A technically excellent relay might faithfully deliver an unsuitable index. A useful index might be paired with an incorrect threshold. A correct threshold might be applied to the wrong season. A correctly computed payment might be delayed or fail to reach the intended recipient.
DN’s contribution is to keep those failure classes visible. An oracle’s delivery assurance should be evaluated on its own terms. The economic suitability of the index needs a different review, with different evidence and a different accountable owner.
A real programme makes the distinction explicit
USDA’s Pasture, Rangeland and Forage FAQ describes area-based payments rather than payments based on one producer’s experience. It explains that the relevant precipitation is interpolated to a grid, not measured individually on every insured operation, and encourages comparison with historical production when selecting intervals. That is a concrete example of the index-versus-local-loss distinction, not evidence that every parametric product shares its terms. [4]
For an automated buyer, the lesson is to record the intended exposure before selecting the feed. “Drought protection” is too broad a requirement. A useful record names the crop or forage activity, the relevant growth stage, the insured area, the covered interval and the contractual trigger.
Do not substitute a convenient station for the prescribed grid because its readings look more familiar. A disagreement may be a useful diagnostic. It does not authorize the agent to rewrite the contract’s data source after observing the weather.
Dataset identity now includes a 2027 transition
RMA’s current Rainfall Index page states that programmes with an 8/31 contract-change date move to NCEI weather data from the 2027 crop year. Annual Forage has a separate transition: it continues with NOAA Climate Prediction Center data for the remainder of 2027 and moves for the 2028 crop year at its 4/30/27 contract-change date. [5]
This is precisely why an agent should not treat an old programme explainer as a permanent machine instruction. The product, crop year and applicable document version need to travel together. Retain the source reviewed at purchase, then check whether a subsequent change applies to that contract or to a later edition.
The transition is a documentation fact. DN has not compared the new and old series, inferred who benefits from the change or estimated its effect on premiums or payouts. Such claims would require the relevant matched data and contract parameters.
“Daily rainfall” can describe different constructions
UCSB’s CHIRPS v3 documentation describes preliminary and final products, plus two daily products derived by distributing pentadal totals using different inputs. It cautions that a daily date label does not represent one uniform observation window across all contributing stations. An application must therefore preserve the actual product identity and time semantics. [2]
For a contract depending on a run of dry days, the distribution within a period can matter even when the period’s total is unchanged. That is DN’s inference from the product definitions, not a reported CHIRPS error. Before using a daily series, ask whether the contract intended that series and whether its definition supports the proposed trigger.
NASA similarly distinguishes IMERG Early, Late and Final runs through their processing and available inputs, including different gauge adjustments. NASA’s research recommendation for Final Run is not permission to replace a policy’s specified settlement input. A contract can require a particular operational release and revision rule. [3]
The procurement question is consequently more useful than “Which satellite is best?” Ask which exact product fits the decision, what its limitations are and which version the contractual parties agreed would control.
The contract-input record
Before an agent acts on a weather trigger, give it a structured record with the following fields. These are DN’s proposed operating requirements, not a claim that a universal insurance standard already mandates this schema.
| Field | Decision it protects |
|---|---|
| Policy and crop-year reference | Which agreement and edition are being interpreted? |
| Area or grid definition | Which footprint supplies the index? |
| Period and time convention | Which observations belong to the trigger? |
| Dataset, version and release | Which values can be used? |
| Trigger and exhaustion points | When does payment start and reach its limit? |
| Limit, rounding and other terms | How does the contractual amount differ from a simplified model? |
| Missing-data and revision rule | What happens if the specified input is absent or changes? |
| Dispute and delivery process | Who can resolve a disagreement and confirm receipt? |
Where any field is unknown, the agent should preserve that state for review. It should not fill a missing threshold from a product advertisement, guess the timezone from the farm’s address or interpret an absent reading as zero rainfall.
Use the DN Weather Trigger Sensitivity Calculator
The calculator models one rainfall-deficit trigger. Payment is zero at or above the attachment threshold and reaches the entered limit at or below the exhaustion threshold. Between them, payment increases linearly as rainfall falls. Two alternative rainfall inputs are evaluated against the same parameters.
Payment = limit × clamp((attachment − rainfall) ÷ (attachment − exhaustion), 0, 1). Attachment must exceed exhaustion. This deliberately narrow formula does not reproduce every insurance contract, USDA programme or on-chain implementation.
DN Weather Trigger Sensitivity Calculator
One capped linear rainfall-deficit formula. No weather data is fetched, and no oracle accuracy, insurance coverage or actual claim is determined.
Use non-sensitive aliases and reference labels. Inputs remain in this page’s temporary memory. Downloading creates a local JSON file; nothing is submitted to DN. All example values are illustrative.
No record has been built. Unknown evidence remains unknown.
View the generated JSON record
In the illustrative example, attachment is 100 millimetres, exhaustion is 40 millimetres and the limit is 1,000 USD. Input A is 70 millimetres, producing a model payment of 500 USD. Input B is 110 millimetres, producing zero. If the separately supplied loss is 800 USD, the model’s uncovered amounts are 300 and 800 USD respectively.
Those are arithmetic consequences of invented inputs. They are not observed farm losses, a claim settlement or a probability estimate. The comparison shows how a difference in the governing input could matter financially; it does not establish that either input is the correct one.
Inside this example’s linear segment, a one-millimetre change changes payment by about 16.67 USD. That rate does not continue beyond the zero and full-payment boundaries. A model that extrapolates the straight line everywhere would produce impossible negative payments or amounts above the limit.
Use the loss gap carefully
The instrument optionally compares each model payment with a reader-supplied loss. It reports an uncovered amount as the positive part of loss minus payment, and a payment-above-entered-loss amount as the positive part of payment minus loss. The latter is a descriptive difference, not a finding that a payment is improper.
Leaving loss blank produces unknown loss-gap results. It does not imply no loss. A single scenario cannot estimate expected basis risk, a payout probability or the quality of a provider. The export explicitly leaves those broader conclusions unestablished.
Financial displays use two decimal places for this worksheet. Raw calculations and the display convention remain in the JSON. The actual policy may specify different rounding, units, deductibles, shares, multiple intervals or caps; those must be modelled separately before relying on a settlement amount.
What an actual accuracy study would need
A defensible study starts with the question being evaluated. Checking a rainfall estimate against a reference is different from checking whether a policy pays when a covered economic loss occurs. Both can be useful, but they require different denominators and records.
For the first, specify location, observation window, units, quality controls and the independence of the comparator. For the second, add the contract, loss definition, exposure, payout and treatment of exclusions. Retain missing periods and rejected observations. Removing difficult cases can change the apparent performance more than changing the oracle.
Columbia IRI describes work with NASA and insurance partners to assess satellite-derived information for index insurance, emphasizing the suitability of products for particular locations and uses. That supports a disciplined validation process; it supplies no universal accuracy ranking for the decentralized networks proposed in the original outline. [6]
DN has not run such a study. The article’s output is a transparent scenario and a better evidence request. If matched weather and policy-loss records become available later, they should support a separately documented empirical edition rather than silently changing an illustrative example into a measurement.
Where automation helps—and where review remains necessary
An agent can help preserve the contract reference, detect a dataset-version mismatch, reproduce arithmetic and assemble a settlement record. These tasks are valuable precisely because they make assumptions inspectable. They do not require the agent to claim that the policy perfectly represents local loss.
For unresolved input changes, missing observations or disputed losses, identify the authorized decision-maker and agreed process. A smart contract’s execution cannot by itself resolve whether the underlying insurance agreement calls for a revised value, an exception or a separate remedy.
Keep product selection, legal terms and coverage questions with the appropriate qualified advisers. DN’s insurance question map addresses a different class of agent-related coverage questions; neither article constitutes a quote, policy or coverage determination.
Methodology, limits and corrections
Edition 1.0, 12 November 2026. Primary documentation was reviewed for definitions and current product-version distinctions. The calculator is an original deterministic scenario model. It fetches no rainfall, farm, wallet or insurance data and makes no settlement transaction.
JSON uses dn.weather-trigger-sensitivity.v1, version 1.0.0. It preserves input basis, area and period aliases, source/release descriptions, the formula, raw and displayed outputs, and unknown loss evidence. Editing an input invalidates the previous result. Reset clears the page record. Inputs remain in temporary page memory; downloads create local files. Use aliases rather than sensitive farm coordinates or policyholder details.
Change log: initial edition replaces the proposed oracle-accuracy ledger with a bounded trigger-sensitivity analysis. Review should follow material dataset changes, policy-version changes or reproducible corrections; no automatic data feed or monitoring schedule is claimed. Send a disputed claim and its primary evidence to press@decentralised.news.
Frequently asked questions
Does correct oracle delivery eliminate basis risk?
No. Delivery, contractual input selection and the relationship between the index and the individual loss require separate evidence.
Can I use this calculator to determine an actual claim?
Only as an illustration of its stated formula. The complete policy and governing settlement process determine an actual claim.
Does a final weather dataset always control the payout?
Read the contract’s specified product and revision rule. A later release is not automatic authority to substitute values.
Why does the tool accept two rainfall inputs?
To expose sensitivity under common parameters. It does not choose the legally controlling or more accurate input.
What does a blank loss mean?
The loss comparison is unknown. The model can still show trigger payments without inventing a loss amount.
Primary sources
- IFC: Index insurance and basis risk.
- UCSB Climate Hazards Center: CHIRPS v3.
- NASA: IMERG Early, Late and Final Run differences.
- USDA RMA: Pasture, Rangeland and Forage FAQ.
- USDA RMA: Rainfall Index and current transition notes.
- Columbia IRI: Satellite data and index insurance.
Published schema and illustrative record
The schema documents this instrument’s JSON format. The example below contains constructed illustrative inputs and outputs; it is not a provider measurement, verified case or live dataset. The instrument above creates a separate record from the inputs you choose. These resources do not establish an API or an automatic monitoring service.
JSON Schema — dn.weather-trigger-sensitivity.v1
Schema version 1.0.0. The schema identifier is a versioned reference, not an asserted network endpoint.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:dn:weather-trigger-sensitivity:v1:1.0.0",
"title": "DN Weather Trigger Sensitivity Calculator record",
"type": "object",
"additionalProperties": false,
"properties": {
"schemaId": {
"const": "dn.weather-trigger-sensitivity.v1"
},
"schemaVersion": {
"const": "1.0.0"
},
"instrument": {
"const": "DN Weather Trigger Sensitivity Calculator"
},
"documentationReviewedDate": {
"const": "2026-11-12"
},
"recordCreatedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:20\\d{2}|2100)-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}Z$"
},
"inputBasis": {
"type": "string",
"enum": [
"illustrative",
"self_reported"
]
},
"inputs": {
"type": "object",
"additionalProperties": false,
"properties": {
"contractRef": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"areaAlias": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"periodAndTimeBasis": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"attachmentMm": {
"type": "number",
"minimum": 0.001,
"maximum": 1000000
},
"exhaustionMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000
},
"limitAmount": {
"type": "number",
"minimum": 0.01,
"maximum": 1000000000000
},
"lossAmount": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"acknowledged": {
"const": true
},
"alternatives": {
"type": "array",
"prefixItems": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"const": "A"
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"release": {
"type": "string",
"enum": [
"unknown",
"preliminary",
"final",
"other"
]
},
"evidenceRef": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240
},
{
"type": "null"
}
]
},
"rainfallMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"id",
"description",
"release",
"evidenceRef",
"rainfallMm"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"const": "B"
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"release": {
"type": "string",
"enum": [
"unknown",
"preliminary",
"final",
"other"
]
},
"evidenceRef": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 240
},
{
"type": "null"
}
]
},
"rainfallMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"id",
"description",
"release",
"evidenceRef",
"rainfallMm"
]
}
],
"items": false,
"minItems": 2,
"maxItems": 2
}
},
"required": [
"contractRef",
"areaAlias",
"periodAndTimeBasis",
"currency",
"attachmentMm",
"exhaustionMm",
"limitAmount",
"lossAmount",
"acknowledged",
"alternatives"
]
},
"model": {
"const": {
"formula": "limit * clamp((attachment - rainfall) / (attachment - exhaustion), 0, 1)",
"units": "Rainfall in millimetres; monetary inputs in the entered currency label.",
"displayRule": "Round each model payment half-up to two decimal places using exact integer ratios; displayed loss gaps and payment differences use those displayed amounts.",
"lossGapRule": "Uncovered=max(loss-payment,0); paymentAboveEnteredLoss=max(payment-loss,0).",
"scope": "One rainfall-deficit interval with a capped linear payout; no premium, deductible, share, multi-interval aggregation or actual contract rounding."
}
},
"results": {
"type": "object",
"additionalProperties": false,
"properties": {
"alternatives": {
"type": "array",
"prefixItems": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"const": "A"
},
"rainfallMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000
},
"payoutFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"payoutRaw": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
"payoutDisplayed": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
"payoutDisplayedCents": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000
},
"triggerRegime": {
"type": "string",
"enum": [
"no_payment_at_or_above_attachment",
"full_payment_at_or_below_exhaustion",
"partial_linear_payment"
]
},
"uncoveredLossRaw": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"uncoveredLossDisplayed": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"paymentAboveEnteredLossRaw": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"paymentAboveEnteredLossDisplayed": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"rainfallMm",
"payoutFraction",
"payoutRaw",
"payoutDisplayed",
"payoutDisplayedCents",
"triggerRegime",
"uncoveredLossRaw",
"uncoveredLossDisplayed",
"paymentAboveEnteredLossRaw",
"paymentAboveEnteredLossDisplayed"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"const": "B"
},
"rainfallMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000
},
"payoutFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"payoutRaw": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
"payoutDisplayed": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
"payoutDisplayedCents": {
"type": "integer",
"minimum": 0,
"maximum": 100000000000000
},
"triggerRegime": {
"type": "string",
"enum": [
"no_payment_at_or_above_attachment",
"full_payment_at_or_below_exhaustion",
"partial_linear_payment"
]
},
"uncoveredLossRaw": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"uncoveredLossDisplayed": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"paymentAboveEnteredLossRaw": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"paymentAboveEnteredLossDisplayed": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"rainfallMm",
"payoutFraction",
"payoutRaw",
"payoutDisplayed",
"payoutDisplayedCents",
"triggerRegime",
"uncoveredLossRaw",
"uncoveredLossDisplayed",
"paymentAboveEnteredLossRaw",
"paymentAboveEnteredLossDisplayed"
]
}
],
"items": false,
"minItems": 2,
"maxItems": 2
},
"payoutDifferenceAMinusBRaw": {
"type": "number",
"minimum": -1000000000000,
"maximum": 1000000000000
},
"payoutDifferenceAMinusBDisplayed": {
"type": "number",
"minimum": -1000000000000,
"maximum": 1000000000000
},
"interiorPaymentSensitivityPerMm": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000000
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"minLength": 0,
"maxLength": 240
},
"minItems": 0,
"maxItems": 5
},
"oracleAccuracyEstimated": {
"const": false
},
"basisRiskProbabilityEstimated": {
"const": false
},
"actualCoverageDetermined": {
"const": false
},
"actualClaimAmountDetermined": {
"const": false
}
},
"required": [
"alternatives",
"payoutDifferenceAMinusBRaw",
"payoutDifferenceAMinusBDisplayed",
"interiorPaymentSensitivityPerMm",
"warnings",
"oracleAccuracyEstimated",
"basisRiskProbabilityEstimated",
"actualCoverageDetermined",
"actualClaimAmountDetermined"
]
},
"sources": {
"const": [
{
"id": 1,
"url": "https://www.ifc.org/en/what-we-do/sector-expertise/financial-institutions/financial-inclusion/insurance"
},
{
"id": 2,
"url": "https://www.chc.ucsb.edu/data/chirps3"
},
{
"id": 3,
"url": "https://gpm.nasa.gov/resources/faq/what-are-differences-between-imerg-early-late-and-final-runs-and-which-should-be-used"
},
{
"id": 4,
"url": "https://www.rma.usda.gov/about-crop-insurance/frequently-asked-questions/pasture-rangeland-forage"
},
{
"id": 5,
"url": "https://www.rma.usda.gov/policy-procedure/general-policies/rainfall-index"
},
{
"id": 6,
"url": "https://iri.columbia.edu/our-expertise/financial-instruments/using-satellite-data-to-improve-index-insurance/"
}
]
},
"limitations": {
"const": [
"All data is entered by the reader; no rainfall, policy or claim is retrieved or authenticated.",
"Alternative inputs are sensitivity scenarios, not authorization to replace a contractually specified data source.",
"A supplied loss and its gap are descriptive, not an expected basis-risk estimate or coverage verdict.",
"Two-decimal displays are a worksheet convention, not actual policy rounding. Raw and displayed amounts are both retained.",
"The sensitivity rate applies only inside the linear segment; it does not extend beyond the payout cap or zero.",
"Unknown source release and loss evidence remain unknown. No network requests, storage or settlement transaction occur."
]
}
},
"required": [
"schemaId",
"schemaVersion",
"instrument",
"documentationReviewedDate",
"recordCreatedAt",
"inputBasis",
"inputs",
"model",
"results",
"sources",
"limitations"
],
"allOf": [
{
"if": {
"properties": {
"inputs": {
"properties": {
"lossAmount": {
"type": "null"
}
}
}
}
},
"then": {
"properties": {
"results": {
"properties": {
"alternatives": {
"items": {
"properties": {
"uncoveredLossRaw": {
"const": null
},
"uncoveredLossDisplayed": {
"const": null
},
"paymentAboveEnteredLossRaw": {
"const": null
},
"paymentAboveEnteredLossDisplayed": {
"const": null
}
}
}
}
}
}
}
},
"else": {
"properties": {
"results": {
"properties": {
"alternatives": {
"items": {
"properties": {
"uncoveredLossRaw": {
"type": "number"
},
"uncoveredLossDisplayed": {
"type": "number"
},
"paymentAboveEnteredLossRaw": {
"type": "number"
},
"paymentAboveEnteredLossDisplayed": {
"type": "number"
}
}
}
}
}
}
}
}
}
]
}Illustrative example JSON record
This fixed example is published for inspection and integration testing. Its record timestamp is not an evidence-verification timestamp.
{
"schemaId": "dn.weather-trigger-sensitivity.v1",
"schemaVersion": "1.0.0",
"instrument": "DN Weather Trigger Sensitivity Calculator",
"documentationReviewedDate": "2026-11-12",
"recordCreatedAt": "2026-11-12T12:00:00.000Z",
"inputBasis": "illustrative",
"inputs": {
"contractRef": "Illustrative capped linear model; not an insurance policy",
"areaAlias": "example-field-area",
"periodAndTimeBasis": "Illustrative single period; same area and interval for both alternatives",
"currency": "USD",
"attachmentMm": 100,
"exhaustionMm": 40,
"limitAmount": 1000,
"lossAmount": 800,
"acknowledged": true,
"alternatives": [
{
"id": "A",
"description": "Invented rainfall input A",
"release": "other",
"evidenceRef": "Illustrative number; no dataset observation",
"rainfallMm": 70
},
{
"id": "B",
"description": "Invented rainfall input B",
"release": "other",
"evidenceRef": "Illustrative number; no dataset observation",
"rainfallMm": 110
}
]
},
"model": {
"formula": "limit * clamp((attachment - rainfall) / (attachment - exhaustion), 0, 1)",
"units": "Rainfall in millimetres; monetary inputs in the entered currency label.",
"displayRule": "Round each model payment half-up to two decimal places using exact integer ratios; displayed loss gaps and payment differences use those displayed amounts.",
"lossGapRule": "Uncovered=max(loss-payment,0); paymentAboveEnteredLoss=max(payment-loss,0).",
"scope": "One rainfall-deficit interval with a capped linear payout; no premium, deductible, share, multi-interval aggregation or actual contract rounding."
},
"results": {
"alternatives": [
{
"id": "A",
"rainfallMm": 70,
"payoutFraction": 0.5,
"payoutRaw": 500,
"payoutDisplayed": 500,
"payoutDisplayedCents": 50000,
"triggerRegime": "partial_linear_payment",
"uncoveredLossRaw": 300,
"uncoveredLossDisplayed": 300,
"paymentAboveEnteredLossRaw": 0,
"paymentAboveEnteredLossDisplayed": 0
},
{
"id": "B",
"rainfallMm": 110,
"payoutFraction": 0,
"payoutRaw": 0,
"payoutDisplayed": 0,
"payoutDisplayedCents": 0,
"triggerRegime": "no_payment_at_or_above_attachment",
"uncoveredLossRaw": 800,
"uncoveredLossDisplayed": 800,
"paymentAboveEnteredLossRaw": 0,
"paymentAboveEnteredLossDisplayed": 0
}
],
"payoutDifferenceAMinusBRaw": 500,
"payoutDifferenceAMinusBDisplayed": 500,
"interiorPaymentSensitivityPerMm": 16.666666666666668,
"warnings": [],
"oracleAccuracyEstimated": false,
"basisRiskProbabilityEstimated": false,
"actualCoverageDetermined": false,
"actualClaimAmountDetermined": false
},
"sources": [
{
"id": 1,
"url": "https://www.ifc.org/en/what-we-do/sector-expertise/financial-institutions/financial-inclusion/insurance"
},
{
"id": 2,
"url": "https://www.chc.ucsb.edu/data/chirps3"
},
{
"id": 3,
"url": "https://gpm.nasa.gov/resources/faq/what-are-differences-between-imerg-early-late-and-final-runs-and-which-should-be-used"
},
{
"id": 4,
"url": "https://www.rma.usda.gov/about-crop-insurance/frequently-asked-questions/pasture-rangeland-forage"
},
{
"id": 5,
"url": "https://www.rma.usda.gov/policy-procedure/general-policies/rainfall-index"
},
{
"id": 6,
"url": "https://iri.columbia.edu/our-expertise/financial-instruments/using-satellite-data-to-improve-index-insurance/"
}
],
"limitations": [
"All data is entered by the reader; no rainfall, policy or claim is retrieved or authenticated.",
"Alternative inputs are sensitivity scenarios, not authorization to replace a contractually specified data source.",
"A supplied loss and its gap are descriptive, not an expected basis-risk estimate or coverage verdict.",
"Two-decimal displays are a worksheet convention, not actual policy rounding. Raw and displayed amounts are both retained.",
"The sensitivity rate applies only inside the linear segment; it does not extend beyond the payout cap or zero.",
"Unknown source release and loss evidence remain unknown. No network requests, storage or settlement transaction occur."
]
}



