7/7

text(): write a bank statement line

Hard

An online bank shows each transaction as one line: when it happened, the amount, and the balance afterwards, separated by " | ":

"Thu, Feb 27th 2:05 PM | ($1,234.50) | balance $8,765.43"

  • the time: short weekday, short month, the day with its ordinal ending, and 12-hour time
  • money in: "$12.35"; money out, a negative amount, in brackets: "($1,234.50)"; the balance follows the same rule
  • thousands separators and exactly two decimals, rounded to the nearest cent

Watch out: text() cuts extra decimals off rather than rounding them. And mm means minutes only when it follows an hour.

Inputs

  • ri!when — Date and Time
  • ri!amount — Decimal
  • ri!balance — Decimal

ri! Rule Inputs

ri!whenDate and Time
datetime(2020, 2, 27, 14, 5, 0)
ri!amountDecimal
-1234.5
ri!balanceDecimal
8765.432

Example 1 — Money out

Input: ri!when
datetime(2020, 2, 27, 14, 5, 0)
Input: ri!amount
-1234.5
Input: ri!balance
8765.432
Output:
"Thu, Feb 27th 2:05 PM | ($1,234.50) | balance $8,765.43"

Example 2 — Money in, rounded to the cent

Input: ri!when
datetime(2021, 3, 1, 9, 30, 0)
Input: ri!amount
12.346
Input: ri!balance
100
Output:
"Mon, Mar 1st 9:30 AM | $12.35 | balance $100.00"

Example 3 — An overdrawn account

Input: ri!when
datetime(2022, 12, 31, 23, 59, 0)
Input: ri!amount
-50
Input: ri!balance
-20.5
Output:
"Sat, Dec 31st 11:59 PM | ($50.00) | balance ($20.50)"

Example 4 — Just after midnight

Input: ri!when
datetime(2023, 1, 2, 0, 15, 0)
Input: ri!amount
0
Input: ri!balance
5
Output:
"Mon, Jan 2nd 12:15 AM | $0.00 | balance $5.00"

Example 5 — The 11th, not the 11st

Input: ri!when
datetime(2024, 1, 11, 10, 0, 0)
Input: ri!amount
1000
Input: ri!balance
1000
Output:
"Thu, Jan 11th 10:00 AM | $1,000.00 | balance $1,000.00"

Appian Expression Tips

  • • Use ri!variableName for rule inputs
  • • Use a!localVariables(local!x: …, body) for locals
  • • Use a!forEach(items: …, expression: fv!item) to iterate
  • • Use where() / reject(fn!isnull, list) to filter