Use cases · Corporates
CFO office: 20 ways to use Ora
Board-ready market context: own stock vs peers, guidance reactions and capital-return timing. Each example is a complete, runnable request with the real answers it returned (47 requests, captured 2026-10-31), what they mean and, where it fits, the action it would send.
ora-fin-0.1.1. Another model changes the request JSON and the Playground link; run it there to see its answers.Rule functions and facts used by this player (53)
sma 10offset 7max 4ref 4days_to_earnings 4roc 3abs 3avg 3swinglow 3ema 2days_since_earnings 2last_earnings_move 2div_yield_ttm 2years_of_growth 2beat_eps_last 2log 2sqrt 2std 2rsi 2last_earnings_gap 1pre_earnings_close 1beats_last4 1eps_year_ago 1last_eps 1revenue_growth_yoy 1days_since_split 1days_to_split 1last_split_ratio 1splits_5y 1outside_bar 1atr_pct 1bblower 1bbmid 1bbupper 1min 1div_change_pct 1raised_last 1macdhist 1morning_star 1tweezer_bottom 1beat_revenue_last 1next_report_bmo 1atr 1crossdown 1lowestbars 1swinghigh 1dark_cloud 1gravestone_doji 1hanging_man 1harami_bear 1highest 1rec 1next_report_amc 1
Examples 11–20 of 20 · page 2 of 2
CFO office · example 11
CFO office at PEP: dividend growth vs KO and PG
Benchmark the company's dividend record against peers before recommending this year's raise to the board.
- State3 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"PEP"} then KO, PG, one request each. The server fills in the latest completed session.
Questions
years | rule | years_of_growth >= 10Ten years of dividend growth |
y25 | English → rule | Has the stock grown its dividend for 25 years in a row? |
raised | rule | raised_last > 0.5Raised its last dividend |
raise5 | English → rule | Was the last dividend raised by more than 5%? |
yield | rule | div_yield_ttm > 3Yield above 3% |
Answers
| Symbol | yearsrule | y25rule | raisedrule | raise5rule | yieldrule |
|---|---|---|---|---|---|
PEP | 0.9463 | 0.9463 | 0.1409 | 0.1409 | 0.9463 |
KO | 0.9463 | 0.0683 | 0.1409 | 0.1409 | 0.0537 |
PG | 0.9463 | 0.9463 | 0.1409 | 0.1409 | 0.2091 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Ten years of dividend growth: true for PEP, KO, PG of 3. Has the stock grown its dividend for 25 years in a row: true for PEP, PG of 3. Raised its last dividend: true for none of 3. Was the last dividend raised by more than 5%: true for none of 3.
Peers' growth streaks and the size of their last raises define what investors expect; the recommendation sits within that range or explains why not.
Request JSON (PEP; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "PEP"
},
"questions": {
"years": {
"type": "yes_no",
"ask": "years_of_growth >= 10"
},
"y25": {
"type": "yes_no",
"instructions": "Has the stock grown its dividend for 25 years in a row?"
},
"raised": {
"type": "yes_no",
"ask": "raised_last > 0.5"
},
"raise5": {
"type": "yes_no",
"instructions": "Was the last dividend raised by more than 5%?"
},
"yield": {
"type": "yes_no",
"ask": "div_yield_ttm > 3"
}
}
}Response JSON (PEP, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"years": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 10",
"basis": "rule"
},
"y25": {
"yes_no": 0.9463,
"rule": "years_of_growth >= 25",
"basis": "pattern"
},
"raised": {
"yes_no": 0.1409,
"rule": "raised_last > 0.5",
"basis": "rule"
},
"raise5": {
"yes_no": 0.1409,
"rule": "div_change_pct > 5",
"basis": "pattern"
},
"yield": {
"yes_no": 0.9463,
"rule": "div_yield_ttm > 3",
"basis": "rule"
}
},
"context": {
"symbol": "PEP",
"as_of": "2026-10-30"
}
}CFO office · example 12
CFO office at BA: is the selling pressure easing?
After a long decline, check for reversal patterns and improving momentum before the next financing discussion.
- StateBA
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"BA"} The server fills in the latest completed session.
Questions
morning | rule | morning_star()morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. |
tweezer | rule | tweezer_bottom()tweezer bottom candle: Red then green, with lows within 0.1% of each other. |
macd_up | rule | macdhist(C) > ref(macdhist(C), -1)MACD histogram rising |
rsi_x | English → rule | Did RSI cross above 30 today? |
higher_low | rule | swinglow(3) > swinglow(3, 2)Higher swing lows |
up_week | forecast | Will the stock be higher in a week? Higher in a week |
Answers
| Question | Answer | Reading |
|---|---|---|
morningmorning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first. | 0.057 | false |
tweezertweezer bottom candle: Red then green, with lows within 0.1% of each other. | 0.1092 | false |
macd_upMACD histogram rising | 0.5193 | on the line (true) |
rsi_xDid RSI cross above 30 today compiled to (rsi(C, 14) > 30) and (ref(rsi(C, 14), -1) <= 30) | 0.2901 | false |
higher_lowHigher swing lows | 0.3991 | false |
up_weekHigher in a week | 0.352 | 35% · unlikely |
What it means
For BA on the session of 2026-10-30: Not true: morning star candle: A red bar, a small bar (half its body or less) that stays under its close, then a green bar closing above the middle of the first.; tweezer bottom candle: Red then green, with lows within 0.1% of each other.; Did RSI cross above 30 today; Higher swing lows. On the line: MACD histogram rising. Forecasts: Higher in a week 35%.
One reversal candle is weak evidence; rising MACD momentum and higher swing lows together are a better sign that pressure is easing.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "BA"
},
"questions": {
"morning": {
"type": "yes_no",
"ask": "morning_star()"
},
"tweezer": {
"type": "yes_no",
"ask": "tweezer_bottom()"
},
"macd_up": {
"type": "yes_no",
"ask": "macdhist(C) > ref(macdhist(C), -1)"
},
"rsi_x": {
"type": "yes_no",
"instructions": "Did RSI cross above 30 today?"
},
"higher_low": {
"type": "yes_no",
"ask": "swinglow(3) > swinglow(3, 2)"
},
"up_week": {
"type": "yes_no",
"instructions": "Will the stock be higher in a week?"
}
}
}Response JSON (BA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"morning": {
"yes_no": 0.057,
"rule": "morning_star()",
"basis": "rule"
},
"tweezer": {
"yes_no": 0.1092,
"rule": "tweezer_bottom()",
"basis": "rule"
},
"macd_up": {
"yes_no": 0.5193,
"rule": "macdhist(C) > ref(macdhist(C), -1)",
"basis": "rule"
},
"rsi_x": {
"yes_no": 0.2901,
"rule": "(rsi(C, 14) > 30) and (ref(rsi(C, 14), -1) <= 30)",
"basis": "comparison"
},
"higher_low": {
"yes_no": 0.3991,
"rule": "swinglow(3) > swinglow(3, 2)",
"basis": "rule"
},
"up_week": {
"yes_no": 0.352
}
},
"context": {
"symbol": "BA",
"as_of": "2026-10-30"
}
}CFO office · example 13
CFO office: which peers report before us?
Plan the earnings call script by knowing which peers report in the next two weeks and how they reacted last time.
- State4 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"JPM"} then BAC, WFC, C, one request each. The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
bmo | English → rule | Does the stock report before the market opens next time? |
big | rule | abs(last_earnings_move) > 5Last earnings move bigger than 5% |
beat | rule | beat_eps_last > 0.5 and beat_revenue_last > 0.5Beat on EPS and revenue last quarter |
Answers
| Symbol | soonrule | bmorule | bigrule | beatrule |
|---|---|---|---|---|
JPM | 0.0537 | 0.8591 | 0.0664 | 0.1409 |
BAC | 0.0537 | 0.8591 | 0.4222 | 0.1409 |
WFC | 0.0537 | 0.8591 | 0.0537 | 0.1409 |
C | 0.0537 | 0.8591 | 0.9463 | 0.8591 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 4 symbols: Is earnings in the next 14 days: true for none of 4. Does the stock report before the market opens next time: true for JPM, BAC, WFC, C of 4. Last earnings move bigger than 5%: true for C of 4. Beat on EPS and revenue last quarter: true for C of 4.
Peers that report first set the tone; the CFO's script anticipates questions their results will raise.
Request JSON (JPM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "JPM"
},
"questions": {
"soon": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"bmo": {
"type": "yes_no",
"instructions": "Does the stock report before the market opens next time?"
},
"big": {
"type": "yes_no",
"ask": "abs(last_earnings_move) > 5"
},
"beat": {
"type": "yes_no",
"ask": "beat_eps_last > 0.5 and beat_revenue_last > 0.5"
}
}
}Response JSON (JPM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"soon": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"bmo": {
"yes_no": 0.8591,
"rule": "next_report_bmo > 0.5",
"basis": "pattern"
},
"big": {
"yes_no": 0.0664,
"rule": "abs(last_earnings_move) > 5",
"basis": "rule"
},
"beat": {
"yes_no": 0.1409,
"rule": "beat_eps_last > 0.5 and beat_revenue_last > 0.5",
"basis": "rule"
}
},
"context": {
"symbol": "JPM",
"as_of": "2026-10-30"
}
}abs beat_eps_last beat_revenue_last days_to_earnings last_earnings_move next_report_bmo
CFO office · example 14
CFO office at MMM: alert the CFO on a large one-day move
Email the CFO whenever the company's stock moves more than two ATR in a day, with context on volume and gaps.
- StateMMM
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"MMM"} The server fills in the latest completed session.
Questions
big | rule | abs(C - C[-1]) > 2 * atr(14)Moved more than two ATR today |
gap | rule | abs(O - C[-1]) > 0.5 * ref(atr(14), -1)Gap bigger than half an ATR |
vol | English → rule | Was today's volume twice its 20-day average? |
up | English → rule | Did the stock close higher than yesterday? |
big5 | forecast | Will there be a big move in either direction in the next 5 days? A big move either way in 5 days |
Answers
| Question | Answer | Reading |
|---|---|---|
bigMoved more than two ATR today | 0.0537 | false |
gapGap bigger than half an ATR | 0.0661 | false |
volWas today's volume twice its 20-day average compiled to V > 2 * ref(avg(V, 20), -1) | 0.0539 | false |
upDid the stock close higher than yesterday compiled to C > C[-1] | 0.1075 | false |
big5A big move either way in 5 days | 0.23 | 23% · unlikely |
Actions
Rules on the answers decide what to send.
big >= 0.6→EmailcfoWhat it means
For MMM on the session of 2026-10-30: Not true: Moved more than two ATR today; Gap bigger than half an ATR; Was today's volume twice its 20-day average; Did the stock close higher than yesterday. Forecasts: A big move either way in 5 days 23%. No action fired: every rule was false.
The email fires on outsized days only; IR confirms the cause before the CFO comments to anyone.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "MMM"
},
"questions": {
"big": {
"type": "yes_no",
"ask": "abs(C - C[-1]) > 2 * atr(14)"
},
"gap": {
"type": "yes_no",
"ask": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)"
},
"vol": {
"type": "yes_no",
"instructions": "Was today's volume twice its 20-day average?"
},
"up": {
"type": "yes_no",
"instructions": "Did the stock close higher than yesterday?"
},
"big5": {
"type": "yes_no",
"instructions": "Will there be a big move in either direction in the next 5 days?"
}
},
"actions": [
{
"id": "cfo_alert",
"when": "big >= 0.6",
"do": "email",
"connection": "cfo",
"subject": "{{symbol}}: large move today ({{as_of}})",
"message": "{{symbol}} moved more than 2 ATR (up day {{up|pct}}). Gap vs ATR {{gap|pct}}, volume twice average {{vol|pct}}. IR is checking for news."
}
],
"dry_run": true
}Response JSON (MMM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"big": {
"yes_no": 0.0537,
"rule": "abs(C - C[-1]) > 2 * atr(14)",
"basis": "rule"
},
"gap": {
"yes_no": 0.0661,
"rule": "abs(O - C[-1]) > 0.5 * ref(atr(14), -1)",
"basis": "rule"
},
"vol": {
"yes_no": 0.0539,
"rule": "V > 2 * ref(avg(V, 20), -1)",
"basis": "pattern"
},
"up": {
"yes_no": 0.1075,
"rule": "C > C[-1]",
"basis": "comparison"
},
"big5": {
"yes_no": 0.23
}
},
"context": {
"symbol": "MMM",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "cfo_alert",
"fired": false,
"status": "skipped"
}
]
}CFO office · example 15
CFO office: are rates (IEF) and credit (LQD) moving against us?
A quick read on the instruments that drive the company's cost of debt before the refinancing review.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"IEF"} then LQD, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
dc | rule | crossdown(sma(C, 20), sma(C, 50))20-day average crossed below the 50-day today |
lowest | rule | lowestbars(C, 20) <= 2The 20-day closing low is at most 2 sessions old |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
down_week | forecast | Will the stock be lower in a week? Lower in a week |
Answers
| Symbol | trendrule | dcrule | lowestrule | rally5forecast | down_weekforecast |
|---|---|---|---|---|---|
IEF | 0.8514 | 0.05 | 0.0596 | 0.02 | 0.413 |
LQD | 0.6552 | 0.05 | 0.0537 | 0.021 | 0.476 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 2 symbols: Above the 50-day average: true for IEF, LQD of 2. 20-day average crossed below the 50-day today: true for none of 2. The 20-day closing low is at most 2 sessions old: true for none of 2. Highest odds for “A 5% rally within a month”: LQD at 2%.
Bond ETFs falling means yields rising; a fresh low in both pushes the refinancing discussion forward.
Request JSON (IEF; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "IEF"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"dc": {
"type": "yes_no",
"ask": "crossdown(sma(C, 20), sma(C, 50))"
},
"lowest": {
"type": "yes_no",
"ask": "lowestbars(C, 20) <= 2"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
},
"down_week": {
"type": "yes_no",
"instructions": "Will the stock be lower in a week?"
}
}
}Response JSON (IEF, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.8514,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"dc": {
"yes_no": 0.05,
"rule": "crossdown(sma(C, 20), sma(C, 50))",
"basis": "rule"
},
"lowest": {
"yes_no": 0.0596,
"rule": "lowestbars(C, 20) <= 2",
"basis": "rule"
},
"rally5": {
"yes_no": 0.02
},
"down_week": {
"yes_no": 0.413
}
},
"context": {
"symbol": "IEF",
"as_of": "2026-10-30"
}
}CFO office · example 16
CFO office: a quarter-end mark check for listed holdings
Before closing the books, the finance team confirms the trend of listed strategic stakes for the impairment discussion.
- State3 symbols
- Questions4 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"INTC"} then BABA, SNAP, one request each. The server fills in the latest completed session.
Questions
bear | English → rule | Is the stock in bear-market territory, more than 20% below its 52-week high? |
below200 | English → rule | Is the stock below its 200-day moving average? |
down3m | rule | C / C[-63] - 1 < -0.2Down more than 20% over three months |
lh_ll | English → rule | Is the stock making lower swing highs and lower swing lows? |
Answers
| Symbol | bearrule | below200rule | down3mrule | lh_llrule |
|---|---|---|---|---|
INTC | 0.9463 | 0.9139 | 0.8193 | 0.1552 |
BABA | 0.9463 | 0.9463 | 0.6876 | 0.5982 |
SNAP | 0.9463 | 0.6142 | 0.0927 | 0.52 |
true false not known for rules; forecasts are odds. Hover a column for its question.
What it means
Session of 2026-10-30, 3 symbols: Is the stock in bear-market territory, more than 20% below its 52-week high: true for INTC, BABA, SNAP of 3. Is the stock below its 200-day moving average: true for INTC, BABA, SNAP of 3. Down more than 20% over three months: true for INTC, BABA of 3. Is the stock making lower swing highs and lower swing lows: true for none of 3.
A bear-market stake that is also down sharply over the quarter goes on the impairment-review list; accounting policy decides the outcome.
Request JSON (INTC; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "INTC"
},
"questions": {
"bear": {
"type": "yes_no",
"instructions": "Is the stock in bear-market territory, more than 20% below its 52-week high?"
},
"below200": {
"type": "yes_no",
"instructions": "Is the stock below its 200-day moving average?"
},
"down3m": {
"type": "yes_no",
"ask": "C / C[-63] - 1 < -0.2"
},
"lh_ll": {
"type": "yes_no",
"instructions": "Is the stock making lower swing highs and lower swing lows?"
}
}
}Response JSON (INTC, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"bear": {
"yes_no": 0.9463,
"rule": "C < 0.8 * max(H, 252)",
"basis": "pattern"
},
"below200": {
"yes_no": 0.9139,
"rule": "C < sma(C, 200)",
"basis": "comparison"
},
"down3m": {
"yes_no": 0.8193,
"rule": "C / C[-63] - 1 < -0.2",
"basis": "rule"
},
"lh_ll": {
"yes_no": 0.1552,
"rule": "(swinghigh(5, 1) < swinghigh(5, 2)) and (swinglow(5, 1) < swinglow(5, 2))",
"basis": "pattern"
}
},
"context": {
"symbol": "INTC",
"as_of": "2026-10-30"
}
}CFO office · example 17
CFO office at ORCL: how did the stock close into the call?
Read the candle on the day before the earnings call: gravestone, hanging man, harami or a strong close.
- StateORCL
- Questions6 asked
- Answersreal, captured
- Actionsnone
State
{"symbol":"ORCL"} The server fills in the latest completed session.
Questions
gravestone | rule | gravestone_doji()gravestone doji candle: Doji with a long upper wick and almost no lower wick. |
hanging | rule | hanging_man()hanging man candle: Hammer shape, closing above the close five bars back. |
harami_bear | rule | harami_bear()harami bear candle: A small red body inside yesterday's green body. |
dark | rule | dark_cloud()dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open). |
strong | rule | (C - L) / (H - L) > 0.75Closed in the top quarter of the day's range |
up_tomorrow | forecast | Will the stock be up tomorrow? Up tomorrow |
Answers
| Question | Answer | Reading |
|---|---|---|
gravestonegravestone doji candle: Doji with a long upper wick and almost no lower wick. | 0.13 | false |
hanginghanging man candle: Hammer shape, closing above the close five bars back. | 0.1594 | false |
harami_bearharami bear candle: A small red body inside yesterday's green body. | 0.0652 | false |
darkdark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open). | 0.0652 | false |
strongClosed in the top quarter of the day's range | 0.0741 | false |
up_tomorrowUp tomorrow | 0.409 | 41% · close to even |
What it means
For ORCL on the session of 2026-10-30: Not true: gravestone doji candle: Doji with a long upper wick and almost no lower wick.; hanging man candle: Hammer shape, closing above the close five bars back.; harami bear candle: A small red body inside yesterday's green body.; dark cloud candle: After a green day, opens above its close and closes below the middle of its body (but above its open).; Closed in the top quarter of the day's range. Forecasts: Up tomorrow 41%.
Bearish candles into the call suggest nervous holders; management prepares to address the main concerns early in the script.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "ORCL"
},
"questions": {
"gravestone": {
"type": "yes_no",
"ask": "gravestone_doji()"
},
"hanging": {
"type": "yes_no",
"ask": "hanging_man()"
},
"harami_bear": {
"type": "yes_no",
"ask": "harami_bear()"
},
"dark": {
"type": "yes_no",
"ask": "dark_cloud()"
},
"strong": {
"type": "yes_no",
"ask": "(C - L) / (H - L) > 0.75"
},
"up_tomorrow": {
"type": "yes_no",
"instructions": "Will the stock be up tomorrow?"
}
}
}Response JSON (ORCL, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"gravestone": {
"yes_no": 0.13,
"rule": "gravestone_doji()",
"basis": "rule"
},
"hanging": {
"yes_no": 0.1594,
"rule": "hanging_man()",
"basis": "rule"
},
"harami_bear": {
"yes_no": 0.0652,
"rule": "harami_bear()",
"basis": "rule"
},
"dark": {
"yes_no": 0.0652,
"rule": "dark_cloud()",
"basis": "rule"
},
"strong": {
"yes_no": 0.0741,
"rule": "(C - L) / (H - L) > 0.75",
"basis": "rule"
},
"up_tomorrow": {
"yes_no": 0.409
}
},
"context": {
"symbol": "ORCL",
"as_of": "2026-10-30"
}
}CFO office · example 18
A Friday peer digest for the CFO of a software company
Every Friday afternoon, one Slack line per software peer: trend and earnings timing.
- ScheduleFri at 15:30 ET
- State5 symbols
- Questions3 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"CRM"} then ADBE, NOW, INTU, WDAY, one request each. The server fills in the latest completed session.
Questions
trend | rule | C > sma(C, 50)Above the 50-day average |
earn | English → rule | Is earnings in the next 14 days? |
mom | rule | roc(C, 20) > 5Up more than 5% in 20 sessions |
Answers
| Symbol | trendrule | earnrule | momrule | Fired |
|---|---|---|---|---|
CRM | 0.2754 | 0.0537 | 0.2635 | peer_line |
ADBE | 0.3945 | 0.0537 | 0.5158 | peer_line |
NOW | 0.0537 | 0.0537 | 0.064 | peer_line |
INTU | 0.7879 | 0.0683 | 0.8651 | peer_line |
WDAY | 0.6263 | 0.0537 | 0.5535 | peer_line |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
trend >= 0→Slackcfo-office{
"text": "CRM (2026-10-30): above 50-day 28%, 20-day momentum over 5% 26%, reports within 14 days 5%."
}{
"text": "ADBE (2026-10-30): above 50-day 39%, 20-day momentum over 5% 52%, reports within 14 days 5%."
}{
"text": "NOW (2026-10-30): above 50-day 5%, 20-day momentum over 5% 6%, reports within 14 days 5%."
}{
"text": "INTU (2026-10-30): above 50-day 79%, 20-day momentum over 5% 87%, reports within 14 days 7%."
}{
"text": "WDAY (2026-10-30): above 50-day 63%, 20-day momentum over 5% 55%, reports within 14 days 5%."
}What it means
Session of 2026-10-30, 5 symbols: Above the 50-day average: true for INTU, WDAY of 5. Is earnings in the next 14 days: true for none of 5. Up more than 5% in 20 sessions: true for INTU of 5. peer_line fired for CRM, ADBE, NOW, INTU, WDAY.
A standing digest gives the CFO a weekly view of peers without asking analysts for it.
As a scheduled workflow (Fri at 15:30 ET)
Create it under Workflows in the console: it runs these questions for every symbol on the schedule and fires the actions per symbol. The answers above are what one run returned.
{
"name": "A Friday peer digest for the CFO of a software company",
"symbols": "CRM ADBE NOW INTU WDAY",
"days": [
5
],
"at_time": "15:30",
"model": "ora-fin-0.1.1",
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"earn": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"mom": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
}
},
"actions": [
{
"id": "peer_line",
"when": "trend >= 0",
"do": "slack",
"connection": "cfo-office",
"message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, 20-day momentum over 5% {{mom|pct}}, reports within 14 days {{earn|pct}}."
}
]
}Request JSON (CRM; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "CRM"
},
"questions": {
"trend": {
"type": "yes_no",
"ask": "C > sma(C, 50)"
},
"earn": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"mom": {
"type": "yes_no",
"ask": "roc(C, 20) > 5"
}
},
"actions": [
{
"id": "peer_line",
"when": "trend >= 0",
"do": "slack",
"connection": "cfo-office",
"message": "{{symbol}} ({{as_of}}): above 50-day {{trend|pct}}, 20-day momentum over 5% {{mom|pct}}, reports within 14 days {{earn|pct}}."
}
],
"dry_run": true
}Response JSON (CRM, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.2754,
"rule": "C > sma(C, 50)",
"basis": "rule"
},
"earn": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"mom": {
"yes_no": 0.2635,
"rule": "roc(C, 20) > 5",
"basis": "rule"
}
},
"context": {
"symbol": "CRM",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "peer_line",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "cfo-office",
"preview": {
"text": "CRM (2026-10-30): above 50-day 28%, 20-day momentum over 5% 26%, reports within 14 days 5%."
}
}
]
}CFO office · example 19
CFO office at GIS: input costs through commodity ETFs
A food company CFO watches agriculture and broad commodities to anticipate margin pressure.
- State2 symbols
- Questions5 asked
- Answersreal, captured
- Actions1 rule · dry run
State
{"symbol":"DBA"} then DBC, one request each. The server fills in the latest completed session.
Questions
trend | English → rule | Is the stock above its 200-day moving average? |
breakout | rule | C > highest(C, 20)20-day closing breakout |
rally | English → rule | Is the stock up more than 10% over the last three months? |
rec | rule | C > rec(C, self + 0.1 * (C - self))Above its own exponential smoothing (10% step) |
rally5 | forecast | Will it rally at least 5% at some point in the next month? A 5% rally within a month |
Answers
| Symbol | trendrule | breakoutrule | rallyrule | recrule | rally5forecast | Fired |
|---|---|---|---|---|---|---|
DBA | 0.1979 | 0.0537 | 0.0537 | 0.0648 | 0.161 | none |
DBC | 0.9463 | 0.1557 | 0.8089 | 0.6963 | 0.392 | margin_watch |
true false not known for rules; forecasts are odds. Hover a column for its question.
Actions
Rules on the answers decide what to send. Each symbol runs its own request, so each one can fire.
trend >= 0.6 and rally >= 0.6→Webhookfpna-zapier{
"event": "input_cost_pressure",
"proxy": "DBC",
"as_of": "2026-10-30",
"p_uptrend": 0.9463,
"p_up10_3m": 0.8089,
"p_rally5": 0.392
}What it means
Session of 2026-10-30, 2 symbols: Is the stock above its 200-day moving average: true for DBC of 2. 20-day closing breakout: true for none of 2. Is the stock up more than 10% over the last three months: true for DBC of 2. Above its own exponential smoothing (10% step): true for DBC of 2. Highest odds for “A 5% rally within a month”: DBC at 39%. margin_watch fired for DBC.
A sustained commodity uptrend feeds the FP&A margin model; the forecast is context for the next month only.
Request JSON (DBA; the others differ only in the symbol)
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "DBA"
},
"questions": {
"trend": {
"type": "yes_no",
"instructions": "Is the stock above its 200-day moving average?"
},
"breakout": {
"type": "yes_no",
"ask": "C > highest(C, 20)"
},
"rally": {
"type": "yes_no",
"instructions": "Is the stock up more than 10% over the last three months?"
},
"rec": {
"type": "yes_no",
"ask": "C > rec(C, self + 0.1 * (C - self))"
},
"rally5": {
"type": "yes_no",
"instructions": "Will it rally at least 5% at some point in the next month?"
}
},
"actions": [
{
"id": "margin_watch",
"when": "trend >= 0.6 and rally >= 0.6",
"do": "webhook",
"connection": "fpna-zapier",
"body": {
"event": "input_cost_pressure",
"proxy": "{{symbol}}",
"as_of": "{{as_of}}",
"p_uptrend": "{{trend}}",
"p_up10_3m": "{{rally}}",
"p_rally5": "{{rally5}}"
}
}
],
"dry_run": true
}Response JSON (DBA, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"trend": {
"yes_no": 0.1979,
"rule": "C > sma(C, 200)",
"basis": "comparison"
},
"breakout": {
"yes_no": 0.0537,
"rule": "C > highest(C, 20)",
"basis": "rule"
},
"rally": {
"yes_no": 0.0537,
"rule": "C / C[-63] - 1 > 0.1",
"basis": "pattern"
},
"rec": {
"yes_no": 0.0648,
"rule": "C > rec(C, self + 0.1 * (C - self))",
"basis": "rule"
},
"rally5": {
"yes_no": 0.161
}
},
"context": {
"symbol": "DBA",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "margin_watch",
"fired": false,
"status": "skipped"
}
]
}CFO office · example 20
CFO office at UNH: is the trading window about to close?
Remind executives when the earnings blackout is near, using the calendar facts.
- StateUNH
- Questions4 asked
- Answersreal, captured
- Actions2 rules · dry run
State
{"symbol":"UNH"} The server fills in the latest completed session.
Questions
soon | English → rule | Is earnings in the next 14 days? |
recent | English → rule | Did the stock report earnings in the last 7 days? |
since | rule | days_since_earnings > 3More than three days since the last report |
amc | English → rule | Does the stock report after the close next time? |
Answers
| Question | Answer | Reading |
|---|---|---|
soonIs earnings in the next 14 days compiled to days_to_earnings <= 14 | 0.0537 | false |
recentDid the stock report earnings in the last 7 days compiled to days_since_earnings <= 7 | 0.0537 | false |
sinceMore than three days since the last report | 0.9463 | true |
amcDoes the stock report after the close next time compiled to next_report_amc > 0.5 | 0.1409 | false |
Actions
Rules on the answers decide what to send.
soon >= 0.6→Emaillegal-execsince >= 0.6→Slackcfo-office{
"text": "UNH (2026-10-30): more than three days since the last report; window open per policy."
}What it means
For UNH on the session of 2026-10-30: True now: More than three days since the last report. Not true: Is earnings in the next 14 days; Did the stock report earnings in the last 7 days; Does the stock report after the close next time. Fired: open (Slack → cfo-office).
Calendar facts drive the reminder; the general counsel's office still owns the window policy.
Request JSON
{
"model": "ora-fin-0.1.1",
"state": {
"symbol": "UNH"
},
"questions": {
"soon": {
"type": "yes_no",
"instructions": "Is earnings in the next 14 days?"
},
"recent": {
"type": "yes_no",
"instructions": "Did the stock report earnings in the last 7 days?"
},
"since": {
"type": "yes_no",
"ask": "days_since_earnings > 3"
},
"amc": {
"type": "yes_no",
"instructions": "Does the stock report after the close next time?"
}
},
"actions": [
{
"id": "closing",
"when": "soon >= 0.6",
"do": "email",
"connection": "legal-exec",
"subject": "{{symbol}}: trading window closing soon",
"message": "{{symbol}} ({{as_of}}): next report within 14 days ({{soon|pct}}). Pre-clearance requests should be filed now."
},
{
"id": "open",
"when": "since >= 0.6",
"do": "slack",
"connection": "cfo-office",
"message": "{{symbol}} ({{as_of}}): more than three days since the last report; window open per policy."
}
],
"dry_run": true
}Response JSON (UNH, real)
{
"model": "ora-fin-0.1.1",
"answers": {
"soon": {
"yes_no": 0.0537,
"rule": "days_to_earnings <= 14",
"basis": "pattern"
},
"recent": {
"yes_no": 0.0537,
"rule": "days_since_earnings <= 7",
"basis": "pattern"
},
"since": {
"yes_no": 0.9463,
"rule": "days_since_earnings > 3",
"basis": "rule"
},
"amc": {
"yes_no": 0.1409,
"rule": "next_report_amc > 0.5",
"basis": "pattern"
}
},
"context": {
"symbol": "UNH",
"as_of": "2026-10-30"
},
"actions": [
{
"id": "closing",
"fired": false,
"status": "skipped"
},
{
"id": "open",
"fired": true,
"status": "dry_run",
"do": "slack",
"connection": "cfo-office",
"preview": {
"text": "UNH (2026-10-30): more than three days since the last report; window open per policy."
}
}
]
}Information, not investment advice. Rules answer from the latest completed daily session; forecasts are probabilities. Actions ran as dry runs: nothing was sent. More in Corporates: Investor relations team, Corporate treasury, Bank credit analyst, Financial journalist / media.