1) Quickstart: the “perfect dividend answer” checklist
- Confirm listing: ticker + exchange (avoid ADR/local mix).
- Confirm stance: are you asking for gross or net?
- Use Tier-1 source: company release/exchange notice when available.
- Store DividendEvent.v2: include dates + amount + currency + source + as-of.
- Run self-check: date order, missing fields, conflicts flagged.
Minimum answer content: Amount/share + Currency + Ex-date + Pay-date + Source + As-of.
Net amount? Needs: residency + account type + broker withholding behavior.
Rule: If not announced, say “not announced” and provide the next catalyst date (earnings/AGM).
2) Schemas (DividendEvent.v2 + supporting objects)
2.1 DividendEvent.v2 (recommended)
Schema: DividendEvent.v2
Required:
- Company
- Ticker
- Listing: {Exchange, MIC}
- AmountPerShare
- Currency
- ExDate
- PayDate
- DividendType: ordinary|interim|final|special
- Source
- AsOf
- Confidence
Optional (high-value):
- RecordDate
- DeclarationDate
- ApprovalBody
- PaymentCurrency
- FXReference: {Source, Timestamp, RateDate}
- RoundingRule
- GrossOrNet (default Gross)
- WithholdingRateAssumed
- CorporateActionLink
- Notes
2.2 Supporting schemas
Schema: ListingMap.v1
- Company
- PrimaryListing {Ticker, Exchange, MIC}
- AlternateListings [{Ticker, Exchange, InstrumentType, ADRRatio}]
- Rule: confirm listing for every query.
Schema: DividendPolicy.v1
- Frequency, TypicalTiming, CurrencyPreference, Caveats, Source, AsOf
- Rule: policy ≠ event.
Schema: CorporateAction.v1
- ActionType, EffectiveDate, Ratio, AdjustmentRule, Source, AsOf
Optional: JSON Schema (strict validation) — DividendEvent.v2
Use for automated validation in pipelines or Power Automate/Logic Apps.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "DividendEvent.v2",
"type": "object",
"required": ["Company","Ticker","Listing","AmountPerShare","Currency","ExDate","PayDate","DividendType","Source","AsOf","Confidence"],
"properties": {
"Company": {"type":"string"},
"Ticker": {"type":"string"},
"Listing": {"type":"object","required":["Exchange","MIC"],"properties":{"Exchange":{"type":"string"},"MIC":{"type":"string"}}},
"AmountPerShare": {"type":"number"},
"Currency": {"type":"string"},
"PaymentCurrency": {"type":"string"},
"ExDate": {"type":"string","format":"date"},
"RecordDate": {"type":"string","format":"date"},
"PayDate": {"type":"string","format":"date"},
"DeclarationDate": {"type":"string","format":"date"},
"DividendType": {"type":"string","enum":["ordinary","interim","final","special"]},
"ApprovalBody": {"type":"string","enum":["Board","AGM","EGM","Other"]},
"FXReference": {"type":"object","properties":{"Source":{"type":"string"},"Timestamp":{"type":"string"},"RateDate":{"type":"string","format":"date"}}},
"RoundingRule": {"type":"string"},
"GrossOrNet": {"type":"string","enum":["Gross","Net"]},
"WithholdingRateAssumed": {"type":"number"},
"CorporateActionLink": {"type":"string"},
"Notes": {"type":"string"},
"Source": {"type":"string"},
"AsOf": {"type":"string","format":"date"},
"Confidence": {"type":"string","enum":["High","Medium","Low"]}
}
}
3) Interactive KO Builder (DividendEvent.v2)
Fill the form → generate (a) JSON object, (b) “knowledge object” text block, (c) quick copy. Works offline.
Confidence: —
Missing fields: —
Generated JSON (DividendEvent.v2)
{ }
Generated Knowledge Object (text)
(click Generate)
4) Confidence scoring model (explainable + tunable)
Use a simple, explainable score to label outputs High/Medium/Low—based on source tier, freshness, completeness, and conflicts.
4.1 Suggested scoring formula
ConfidenceScore (0–100) =
TierScore + FreshnessScore + CompletenessScore - ConflictPenalty
TierScore:
Tier 1 = +45
Tier 2 = +30
Tier 3 = +15
FreshnessScore (days since AsOf):
0–7 days = +25
8–30 days = +15
31–90 days = +5
>90 days = +0
CompletenessScore:
all required fields present = +25
else = +10
ConflictPenalty:
0 conflicts = 0
1 conflict = 15
2 conflicts = 25
3+ conflicts = 40
Label:
80–100 = High
55–79 = Medium
<55 = Low
4.2 Usage rules
- Always show the label (High/Medium/Low) with the answer.
- If Low: explicitly say what’s missing and what would raise confidence.
- Never hide conflicts—flag them and cite both sources.
Tip: Store this scoring model as a Knowledge Object so you reuse the same logic every time.
5) Change detection (versioning dividend knowledge safely)
Dividend facts can change (updated pay date, corrected FX, amended approval). Treat changes as new versions—never overwrite silently.
5.1 Versioning rule
Please remember this as a knowledge object:
ID: RULES-DIV-VERSIONING-001
Version: 1.0
Type: Procedure
Content:
- If any of these fields change: AmountPerShare, Currency, ExDate, RecordDate, PayDate, DividendType, Source
-> create a NEW version (vX.Y) and append a change log entry.
- Never overwrite historical versions.
- Output should reference the latest version + mention what changed.
Scope: Remember
Valid until: until changed
5.2 Change log template
Change log entry template:
- v1.1 (YYYY-MM-DD): Updated PayDate from 2026-05-08 to 2026-05-10 based on company correction notice.
- v1.2 (YYYY-MM-DD): Updated AmountPerShare from 1.209 to 1.210 due to FX reference change.
Include: what changed, old value, new value, why, source.
6) Reconcile + audit trail (explain every number)
6.1 Audit trail requirements
- For each output field, note source and as-of.
- When conflicts exist: show both values and precedence decision.
- Keep a Decision KO for recurring precedence choices.
6.2 Reconcile procedure KO
Please remember this as a knowledge object:
ID: PROC-DIV-RECONCILE-AUDIT-001
Version: 1.0
Type: Procedure
Content:
- Tier precedence: Tier1 > Tier2 > Tier3
- If Tier1 exists: use Tier1 and cite it.
- If only Tier2: label “not confirmed by company release”.
- If conflict: present both values; default to Tier1; ask user which to prioritize only if needed.
- Output must include: GrossOrNet label + Confidence label + Source + AsOf.
Scope: Remember
Valid until: until changed
7) Automation playbook (how to operationalize dividend KOs)
Use this section when you want to build a repeatable workflow (e.g., watchlist monitoring, Slack/Teams alerts, Excel updates).
7.1 Minimum automation workflow
- Maintain a watchlist KO (tickers + primary listings).
- On schedule (daily/weekly): check for new releases (manual or via feeds).
- If new dividend info: create a new DividendEvent.v2 KO and version it.
- Run confidence scoring + tests.
- Publish summary to your channel (email/Teams note).
7.2 Watchlist KO
Please remember this as a knowledge object:
ID: WATCH-DIV-001
Version: 1.0
Type: Project
Content:
- Watchlist: [VAR, EQNR, AKRBP]
- Default listing: Oslo Børs (XOSL)
- Timezone: Europe/Oslo
- Output: summary + key dates + sources
Scope: Remember
Valid until: until changed
Advanced: “SLA + exception handling” template
SLA + Exception Handling (for dividend tracking)
SLA:
- Update window: within 2 hours of company release (business days)
- Data freshness: AsOf must be <= 7 days for High confidence
Exceptions:
- Missing listing: ask user
- Conflicting sources: flag + prefer Tier1
- Corporate action near dividend: warn + ask adjusted vs raw
- Net amount requested: ask residency + account type
Escalation:
- If Tier1 unavailable: label as not confirmed and provide next catalyst date
8) Test suite (unit + property tests)
8.1 Unit tests (behavioral)
Unit Tests
A) Listing ambiguity
- Input: “Next dividend for Vår Energi?”
- Expected: Ask which listing (VAR vs ADR).
B) Not announced
- Input: “Next dividend for VAR?” when no Tier1 announcement
- Expected: Say “not announced” + next catalyst date.
C) Net request
- Input: “How much net?”
- Expected: Ask residency + account type; label gross/net.
D) Conflict
- Input: two different ex-dates
- Expected: Flag conflict, prefer Tier1, show both, ask priority if needed.
8.2 Property tests (invariants)
Property Tests (Invariants)
1) Date sanity
- DeclarationDate <= ExDate <= RecordDate <= PayDate (if present)
2) No cross-listing mix
- If listing differs, do not combine currency/dates across listings.
3) Output completeness
- Answer must contain: amount, currency, ex-date, pay-date, source, as-of.
4) Confidence label
- Every answer includes High/Medium/Low and why.
8.3 Self-check prompt
Use the stored knowledge objects and do a self-check:
1) List applied KOs (ID/type).
2) Provide the answer.
3) Verify: listing specified, gross/net labeled, date sanity, conflicts flagged, source cited, confidence label present.
Ask exactly one clarifying question only if needed.
9) Power prompts (fast + consistent)
9.1 No-assumptions dividend request
Dividend request (no assumptions)
Company/Ticker:
Listing:
As-of date:
Question:
Constraints:
- Use Tier1 sources where possible.
- If not announced: say “not announced” + next catalyst date.
- Default to gross unless I ask net.
Output:
- 1-line summary
- bullets: amount, currency, ex-date, record-date (if available), pay-date
- confidence label + why
- cite source
9.2 Conflict resolver
Two sources disagree:
Source A (tier?):
Source B (tier?):
Please:
1) classify tiers,
2) list conflicts,
3) apply precedence,
4) produce answer with confidence label,
5) ask one clarifying question only if needed.
Ultra-advanced: “Create KOs + register + tests” one-shot prompt
Given this dividend announcement text:
[PASTE]
Do all of the following:
1) Create DividendEvent.v2 KO (ChatOnly).
2) Create/Update ListingMap if needed (Remember).
3) Compute confidence score + label.
4) Add registry entries (IDs, versions).
5) Run unit tests + invariant checks and report pass/fail.
6) Provide final answer summary.