Skip to content

Turn the investment policy into limits your systems can check.

Three in four organisations have a written investment policy. Far fewer can ask a system whether today’s portfolio is inside it. The gap is closeable with ordinary data work, and the portfolio moving out of bank deposits is a good reason to close it this year.

The portfolio got more varied while the policy stayed in a folder.

For a long stretch, corporate cash management was a small enough problem to hold in one head. Most of the money sat in a handful of operating accounts at two or three banks, a slice went into a money market fund, and the investment policy was a document the treasurer knew well enough to apply from memory. The limits in it were real, and they were enforced by a person who could see the whole picture at once. That worked, and for many companies it still does.

The 2026 AFP Liquidity Survey suggests the picture is getting harder to hold. Fielded in March 2026 among 309 treasury professionals at US organisations, it records 46 percent of organisations increasing their US cash balances, up from 38 percent the year before. At the same time the mix moved. An average of 83 percent of short term investment balances sits in safe and liquid vehicles, but the share held in bank deposits dropped to 42 percent, which the survey describes as the lowest since 2011, while the share in Treasury securities increased. Three in four organisations have a written investment policy.

Read those together and a practical question falls out. More money, spread across more kinds of instrument, held with more counterparties, governed by a policy that almost everyone has written down. The policy is not the weak point. The weak point is that in most companies nothing can read it. It exists as prose in a document, the holdings exist in a mixture of bank statements, portal exports and a spreadsheet, and the connection between the two is a person doing careful work on a Tuesday.

This is a good problem to have, and an unusually tractable one. The policy is already written, which means the hard thinking about risk appetite has been done. What is missing is a translation layer: reference data good enough to aggregate on, limits expressed as rows rather than as sentences, and a check that runs at the moments that matter. None of that is novel engineering. It is the same kind of work as making a vendor master usable, and it produces the same kind of payoff, which is that a question everyone currently answers by assembling something can be answered by asking.

What the 2026 AFP Liquidity Survey records, and the operating question each finding raises for the systems that hold the portfolio. Survey figures are from the Association for Financial Professionals press release of 16 June 2026 announcing the survey; the right hand column is Rivane’s reading, not the survey’s.
FindingWhat the survey reportsWhat it asks of your systems
Cash balances went up46 percent of organisations increased their US cash balances as of March 2026, up from 38 percent the previous yearA bigger balance crosses concentration limits sooner. A limit expressed as a percentage of the portfolio behaves differently from one expressed in absolute currency, and most policies contain both.
Bank deposits fell to 42 percentThe average share of short term investment balances held in bank deposits dropped to 42 percent, which the survey records as the lowest since 2011Money that leaves a deposit account leaves the one place the ledger sees natively. Bank balances arrive on a statement. Fund positions and securities usually do not, unless someone builds the feed.
Treasury securities roseThe average share held in Treasury securities increased, alongside an average 83 percent of short term balances held in safe and liquid vehicles overallSecurities bring settlement conventions, accrued interest and a custodian into a data model that was built around bank accounts. Trade date and settlement date stop being the same day.
Written policies are normalThree in four organisations have a written investment policy that dictates their short term investment strategyThe policy exists almost everywhere. The question is whether any system can read it. A rule nobody can query is enforced by whoever happens to remember it.
Real time expectations are rising41 percent of organisations expect money market funds to offer 24/7 liquidity, up from 38 percent in 2025An expectation about liquidity is a planning assumption. If it is not recorded as an instrument attribute, the forecast quietly assumes same day access that the fund documents may not promise.
Bank selection is about creditThe most important factor in choosing a bank is relationship strength, followed by credit quality and counterparty riskCredit quality is already a stated selection criterion. Holding the rating, its source and its date as data turns a selection criterion into a monitored one.
Funds are chosen on yield and ratingThe most important factor in a money market fund is yield, followed by fund ratings and a stable net asset valueYield is easy to capture and moves daily. Fund rating and share price behaviour are the attributes that decide what happens on a bad day, and they are the ones usually missing from the record.
Digital assets remain small1 percent of organisations are piloting or using stablecoins in a limited capacity, and 9 percent are actively exploring themSmall today, and worth modelling as an instrument type now rather than as an exception later. A record that can already express redemption mechanics has somewhere to put it.
What the 2026 AFP Liquidity Survey records, and the operating question each finding raises for the systems that hold the portfolio. Survey figures are from the Association for Financial Professionals press release of 16 June 2026 announcing the survey; the right hand column is Rivane’s reading, not the survey’s.

Every vehicle makes a different promise about getting the money back.

The cash and short term investment line presents a set of holdings as one number, and the instinct is to treat the contents as interchangeable. They are not, and the differences show up precisely on the day the money is needed. A deposit is available on demand, subject to a cut off time. A fund is redeemed on the fund’s terms, which can include a fee. A Treasury bill is sold into a market, which is deep but settles on its own cycle. A repurchase agreement matures contractually and carries two credits rather than one. These are all ordinary facts, and they belong in the instrument record rather than in someone’s working knowledge.

Money market funds are the clearest illustration, because the rules changed and the change was specific. The SEC amendments adopted in July 2023 removed the ability to impose temporary redemption gates, and removed the regulatory tie that permitted a fee when weekly liquid assets fell below a threshold. In their place, institutional prime and institutional tax exempt funds must impose a mandatory liquidity fee when the fund experiences daily net redemptions exceeding 5 percent of net assets, unless the fund’s liquidity costs are de minimis, and any non government fund must impose a discretionary fee if its board or delegate determines a fee is in the best interest of the fund. Minimum liquidity requirements rose to at least 25 percent of total assets in daily liquid assets and at least 50 percent in weekly liquid assets.

The operational translation is short. Whether a redemption can carry a fee depends on the fund category, and the fund category is a field. A portfolio record that stores the holding as money market fund and stops there has thrown away the attribute that decides what a stressed day looks like. Set that against the survey finding that 41 percent of organisations expect funds to offer 24/7 liquidity, up from 38 percent in 2025, and the value of writing the mechanics down becomes clear. An expectation is a planning assumption. An attribute is a fact you can test the forecast against.

Deposits deserve the same treatment for a different reason. The FDIC insures deposits to at least 250,000 dollars at each insured bank, and mutual funds, stocks and bonds and crypto assets held through a bank are not covered at all. At corporate balances, deposit insurance is a detail rather than a protection, which means the thing actually standing behind an operating balance is the bank’s own credit. The survey already reflects this: the most important factor in choosing a bank is relationship strength, followed by credit quality and counterparty risk. Credit quality is a stated selection criterion almost everywhere. Recording the rating, its agency and its date turns a criterion applied once into one that is monitored.

Government securities bring the plumbing question. The SEC clearing mandate for US Treasury securities reaches eligible secondary market transactions, with compliance set for 31 December 2026 for eligible cash market transactions and 30 June 2027 for eligible repo transactions, after the Commission extended both dates by a year in February 2025. Commissioner Uyeda’s April 2026 update records the work still in flight, including a published SIFMA request concerning the inter affiliate exemption, a reopened comment period on an Institute of International Bankers request about extraterritorial application, and approvals of new clearing agencies and of Fixed Income Clearing Corporation rule changes broadening client access. A corporate treasury is rarely a direct participant in any of this. It is, however, a customer of firms that are, and whether a repurchase agreement is centrally cleared is about to be a more interesting attribute than it has been. Storing a cleared flag now costs one column.

Five common short term vehicles, the promise each one actually makes about returning the money, and the attributes worth holding on the instrument record so that promise is data rather than custom. Regulatory statements are from the SEC money market fund reform fact sheet and press release, the SEC Treasury clearing compliance date extension, and the FDIC deposit insurance page, each read directly.
VehicleHow the money comes backWhat to recordWhere teams get caught
Bank depositAvailable on demand within the bank’s own cut off times. Deposit insurance is a stated, capped protection: the FDIC insures deposits to at least 250,000 dollars at each insured bank, which for corporate balances is a rounding error rather than a safety netThe legal entity that holds the deposit, its parent, its credit rating with source and date, the cut off time by currency and payment rail, and whether the balance is swept overnight and into whatConcentration is per legal entity, not per account. Three accounts at the same bank are one exposure, and a sweep can move the real overnight exposure somewhere the account name does not mention.
Government money market fundRedeemable on the fund’s terms. Under the 2023 SEC amendments, gates were removed, and a government fund is not subject to the mandatory liquidity fee. It may still impose a discretionary fee only if it is a non government fund, which a government fund is notThe fund’s legal identity and its manager, the fund category, the rating, the share price convention, the daily cut off, and the settlement cycle for a redemptionThe most permissive of the fund categories, which makes it easy to treat as cash. The attribute worth recording is the cut off, because a redemption placed after it is tomorrow’s money.
Institutional prime or tax exempt fundSubject to a mandatory liquidity fee when the fund experiences daily net redemptions exceeding 5 percent of net assets, unless the fund’s liquidity costs are de minimis. A discretionary fee is also available to the board or its delegate for any non government fundThe same as a government fund, plus an explicit flag that a redemption can carry a fee, and the fund category that determines whether the mandatory trigger appliesThis is the clearest case for storing redemption mechanics as an attribute. The fee applies precisely on the day everyone wants their money, which is the day the cash forecast is being relied on.
Treasury bill held outrightLiquidity comes from selling into the secondary market rather than from redeeming with an issuer. The US Treasury market stands at nearly 29 trillion dollars outstanding, so depth is rarely the constraint; the constraint is the settlement cycle and the custody chainThe custodian, the account it settles into, the maturity date, the trade date and settlement date as separate fields, and the accrual treatmentTrade date and settlement date diverging is the first thing that breaks a data model built for bank balances. An exposure exists from trade date; the cash moves later.
Repurchase agreementLiquidity is contractual and short dated, and the counterparty is the dealer rather than the issuer of the collateral. The SEC clearing mandate reaches eligible secondary market transactions, with compliance set for 31 December 2026 for eligible cash market transactions and 30 June 2027 for eligible repo transactionsThe cash counterparty and the collateral issuer as two separate fields, the haircut, the maturity, and whether the transaction is centrally clearedA repo has two credits in it and a policy usually has an opinion about both. Storing only one of them makes the exposure report confidently wrong.
Commercial paperHeld to maturity in practice, with a secondary market that is reliable in ordinary conditions and thin in poor ones. Not a deposit, so no deposit insurance appliesThe issuer and its parent, the programme, the rating at purchase and the current rating, the maturity, and the dealer it was bought throughRating at purchase and rating now are different facts, and a policy that tests only one of them is testing the wrong one. Keep both, with dates.
Five common short term vehicles, the promise each one actually makes about returning the money, and the attributes worth holding on the instrument record so that promise is data rather than custom. Regulatory statements are from the SEC money market fund reform fact sheet and press release, the SEC Treasury clearing compliance date extension, and the FDIC deposit insurance page, each read directly.

The policy, expressed as rows a system can evaluate.

Strip the vocabulary away and there are three tables. A counterparty master that says who the money is with and which credit group that rolls up to. An instrument master that says what each holding is and how it redeems. A limit table with one row per clause of the policy. A check reads all three, computes an exposure and compares it to a value. That is the whole design, and most of the difficulty sits in the first table rather than the last.

Counterparty identity is where exposure reports quietly go wrong, and the failure is invisible because every individual figure is correct. Four accounts at entities within one banking group, a money market fund that group manages, and a repurchase agreement where it is the cash counterparty are six rows and one credit. A report that shows six modest positions where the policy would see one large one is not wrong about any number in it. Legal entity identifiers fix this without heroics: an LEI record from the GLEIF API carries direct parent and ultimate parent links, along with branches and managed funds, which covers both a branch trading under a local name and a fund whose manager is the credit the policy actually has in mind.

The instrument master carries the redemption model rather than a type label. Two fields do most of the work: how liquidity is obtained, and what can interrupt it. On demand from an issuer, redeemed from a fund, sold into a market, or paid at contractual maturity. Interrupted by a cut off time, by a fee, by a settlement cycle, or by a market that thins out. A record that can express those two things has somewhere to put a stablecoin when the 1 percent piloting them today becomes a larger number, without a schema change and without a new exception path.

Limits are the easy table and the one most often built badly. A limit needs an effective date. Without it, a policy revision rewrites the history of every check that ran before it, and a result from three months ago can no longer be explained. A limit expressed as a percentage also needs its denominator recorded on the result, because 25 percent of the portfolio is a moving target and the same position passes or fails depending on what else was held that day. Both are one extra column, and both are the difference between a stored result that is evidence and one that is a number nobody can reconstruct.

A worked shape for the limit model, with the exception query that keeps it honest

# The investment policy, expressed as rows a system can evaluate.
# Nothing exotic. The value is in the effective dates and the parent links.

policy:
  version: "IP-2026.2"
  approved_on: "2026-07-01"
  effective_from: "2026-07-15"
  effective_to: null
  approved_by: "board-treasury-committee"

counterparties:
  - id: "CP-0114"
    legal_name: "Example Bank, National Association"
    lei: "00000000000000000000"          # placeholder identifier
    direct_parent_lei: "11111111111111111111"
    ultimate_parent_lei: "11111111111111111111"
    group_key: "GRP-EXAMPLE"             # what limits aggregate on
    ratings:
      - agency: "agency-a"
        value: "A+"
        as_of: "2026-05-20"

instruments:
  - id: "INS-2207"
    type: "money_market_fund"
    fund_category: "institutional_prime"  # drives the fee question
    issuer_cp: "CP-0114"
    manager_cp: "CP-0114"                 # often the real credit
    liquidity_source: "redeem_from_fund"
    redemption_fee_possible: true         # mandatory fee regime applies
    cutoff_local: "15:00"
    cutoff_tz: "America/New_York"
    settlement_days: 1

  - id: "INS-2208"
    type: "repurchase_agreement"
    cash_counterparty: "CP-0114"          # two credits, two fields
    collateral_issuer: "CP-9001"
    haircut_pct: 2.0
    centrally_cleared: false
    liquidity_source: "contractual_maturity"
    maturity_date: "2026-09-28"

limits:
  - id: "LIM-01"
    clause_ref: "IP-2026.2 s4.2(a)"
    subject_type: "group"
    subject_key: "GRP-EXAMPLE"
    basis: "pct_of_portfolio"
    value: 25.0
    effective_from: "2026-07-15"
    owner: "assistant-treasurer"
  - id: "LIM-02"
    clause_ref: "IP-2026.2 s4.4"
    subject_type: "instrument_type"
    subject_key: "commercial_paper"
    basis: "absolute_usd"
    value: 50000000
    effective_from: "2026-07-15"
    owner: "assistant-treasurer"

# Every run writes a row, passing or failing. A stored pass is evidence.
check_results:
  - run_at: "2026-09-19T08:05:00Z"
    policy_version: "IP-2026.2"
    limit_id: "LIM-01"
    denominator_usd: 412880000
    exposure_usd: 96150000
    exposure_pct: 23.29
    result: "pass"

# The exception query. Run it before the placement, not after the report.
# Every row it returns is a hole in the control, not a rounding difference.

SELECT position_id, reason FROM (
  -- a holding whose counterparty has no group key, so it aggregates nowhere
  SELECT p.position_id, 'counterparty has no group key' AS reason
    FROM positions p JOIN counterparties c ON p.counterparty_id = c.id
   WHERE c.group_key IS NULL
  UNION ALL
  -- a fund recorded without the category that decides the fee question
  SELECT p.position_id, 'fund category missing'
    FROM positions p JOIN instruments i ON p.instrument_id = i.id
   WHERE i.type = 'money_market_fund' AND i.fund_category IS NULL
  UNION ALL
  -- a repo carrying only one of its two credits
  SELECT p.position_id, 'repo missing collateral issuer'
    FROM positions p JOIN instruments i ON p.instrument_id = i.id
   WHERE i.type = 'repurchase_agreement' AND i.collateral_issuer IS NULL
  UNION ALL
  -- a rating old enough that the limit is testing history
  SELECT p.position_id, 'rating stale'
    FROM positions p JOIN counterparty_ratings r ON p.counterparty_id = r.cp_id
   WHERE r.as_of < CURRENT_DATE - INTERVAL '180 days'
  UNION ALL
  -- an account that sweeps to a target we do not hold a record for
  SELECT a.position_id, 'sweep target unmodelled'
    FROM accounts a
   WHERE a.sweep_target_id IS NOT NULL
     AND a.sweep_target_id NOT IN (SELECT id FROM instruments)
  UNION ALL
  -- an accepted breach with no end date
  SELECT e.position_id, 'exception has no expiry'
    FROM exceptions e WHERE e.expires_on IS NULL
  UNION ALL
  -- a check result that cannot be tied to the limits in force when it ran
  SELECT cr.position_id, 'check result has no policy version'
    FROM check_results cr WHERE cr.policy_version IS NULL
) exceptions
ORDER BY reason, position_id;

The shape above is deliberately plain, and two details in it carry more weight than their size suggests. The first is that the money market fund row holds both an issuer and a manager, with a fund category next to them, because the credit the policy cares about is frequently the manager and the category is what decides the fee question. The second is that the repurchase agreement row has two counterparty fields, a cash counterparty and a collateral issuer, so the exposure report does not confidently report one credit where there are two. The check results table writes a row on every run, passing or failing, because a control that writes only on failure cannot prove it ran.

How an investment policy becomes a limit check a system can runA diagram in three bands. Across the top, the idea that holds the rest together: a written investment policy is a set of limits, and a limit only works as a control once something can evaluate it against today’s holdings. In the middle band, three boxes run left to right. On the left, the reference data: counterparties keyed to a legal entity identifier with direct and ultimate parent links so exposures roll up to a credit group, and instruments carrying how each one actually redeems, including whether a redemption fee can apply, the cut off time and the settlement cycle. In the centre, the limit table, one row per clause of the policy, each carrying a subject such as a group or an instrument type, a basis of either an absolute amount or a percentage of the portfolio, a value, an effective date and an owner. On the right, the two moments the check runs: before a placement, where it can prevent a breach, and every morning, where it produces the daily record. Below, a band sets out the exception query as the control: any counterparty with no group key, any fund recorded without the category that decides the fee question, any repurchase agreement carrying only one of its two credits, any rating old enough that the limit is testing history, any account sweeping to a target that is not modelled, any accepted breach with no expiry date, and any check result that cannot be tied to the policy version in force when it ran. At the foot, the reason it matters now: the 2026 AFP Liquidity Survey records the average share of short term balances held in bank deposits falling to 42 percent, the lowest since 2011, with the share in Treasury securities rising, so the portfolio has more counterparties and more redemption mechanics in it than the last time anyone checked by hand.FROM A DOCUMENT TO A CHECK THAT RUNSTHE IDEA UNDERNEATHA written policy is already a set of limits. It becomes a control at the moment something can evaluate those limitsagainst the holdings you have today, before the money moves rather than in a report the following week.THE REFERENCE DATACounterparties keyed to anLEI, with parent linksInstruments carrying howthey actually redeem: fee,cut off, settlement cycleRatings with agency and dateTHE LIMIT TABLEOne row per policy clause:subject (group, issuer,instrument type, rating band),basis, value, effective date,owner, and the clause itcame fromTHE TWO MOMENTSBefore a placement, wherethe check prevents a breachEvery morning, where itwrites the daily recordEach result stamped with thepolicy version it testedTHE CONTROL, ONE EXCEPTION QUERY BEFORE THE PLACEMENTAny counterparty with no group key. Any fund with no category. Any repo carrying one of its two credits. Any ratingold enough that the limit is testing history. Any account sweeping to a target nobody modelled. Any accepted breachwith no expiry. Any check result that cannot be tied to the policy version in force on the day it ran.Each row is a small data fix now, or an unanswerable question in an audit later.WHY THE TIMING IS GOODThe 2026 AFP Liquidity Survey puts the average share of short term balances in bank deposits at 42 percent, thelowest since 2011, with Treasury securities rising. More vehicles, more counterparties, more to check by hand.
The policy already contains the limits. What turns them into a control is reference data good enough to aggregate on, a limit table with effective dates, and a check that runs at the two moments that matter. The figures at the foot are from the 2026 AFP Liquidity Survey and describe why the portfolio being checked is more varied than it used to be.

The exception query at the end is the piece to build first, ahead of the limits themselves. It is the only part that tells you what you do not yet have, and the rows it returns tend to be few and specific: a counterparty with no group key, a fund recorded without its category, a repo carrying one of its two credits, a rating old enough that the limit is testing history. Each one is a small fix rather than a programme, and fixing them is what makes the limit check that follows worth trusting.

This sits alongside ground Rivane has covered before. We looked at the cash and cash equivalents line as a disclosure question, at the consent and connectivity model behind bank APIs, and at what structured payment data does for treasury reconciliation. This article takes the control side of the same portfolio: not what the line says in the accounts, but whether the holdings behind it are inside the limits the company set for itself, and whether anything other than a person can answer that.

An implementation checklist.

  1. 1.Write down the list of holdings first, before touching the policy. One row per position, as of today, with the amount, the currency, the instrument type, the legal entity on the other side and where the record came from. Most teams find that this takes longer than expected and that the difficulty is concentrated in positions held outside the bank statement, which is the useful finding.
  2. 2.Give every counterparty a legal entity identifier and record its parent. The GLEIF API returns direct parent and ultimate parent links on an LEI record, which is what lets three separate positions roll up to one credit. Without that link, a group exposure is assembled by someone recognising names, which works until the names differ.
  3. 3.Record the redemption mechanics of each instrument as attributes rather than as assumptions. Whether a fee can apply on redemption, whether the cut off is 2pm or 4pm and in which time zone, what the settlement cycle is, and whether liquidity comes from an issuer or from a market. These are the fields that decide what happens on the day it matters.
  4. 4.Turn each policy clause into a limit row. A limit has a subject (an issuer, a group, an instrument type, a rating band, a tenor bucket), a basis (absolute currency amount or percentage of portfolio), a value, an effective date and an owner. A clause that resists this treatment is usually a clause that was ambiguous in prose too, and pinning it down is the point.
  5. 5.Keep the rating with its source and its date. A rating is a fact about a moment. Stored as a bare field it silently becomes a claim about the present that nobody refreshed. Stored with the agency and the date, a stale rating is visible as staleness rather than passing as current.
  6. 6.Run the check before the money moves. A pre trade check that says this placement would take group exposure to 31 percent against a 25 percent limit is worth more than a report that says the same thing on Thursday. The pre trade version prevents a breach; the report documents one.
  7. 7.Recompute daily and store the result, not just the exception. A stored daily result is the evidence that the check ran and passed. Storing only breaches leaves you unable to distinguish a clean day from a day the job failed to run, which is precisely the distinction an auditor will want.
  8. 8.Model the sweep. Where an operating balance sweeps overnight into a fund or a repo, the exposure at the end of the day is not the one on the account. Record the sweep target as part of the account so the overnight position is derived rather than assumed.
  9. 9.Give exceptions an owner and an expiry. A breach that is accepted deliberately is a normal part of treasury life, particularly around an acquisition or a large receipt. An accepted breach with no end date is how a temporary position becomes the permanent shape of the portfolio. Require both, and let the expiry force a fresh decision.
  10. 10.Separate trade date from settlement date in the model. A securities position exists from trade date and the cash leaves on settlement date. Where both are held in one field, the exposure report and the cash forecast disagree by a day or two and nobody can say which is right.
  11. 11.Version the policy and stamp each check with the version it used. When the policy changes, yesterday’s passing result was tested against yesterday’s limits, and that is correct rather than a problem, provided the record says so. Without the stamp, a policy change silently rewrites the history of every previous check.
  12. 12.Decide in advance how a downgrade is handled. A limit keyed on a rating band will start failing when a counterparty moves band, which is the system working. What the policy needs to say, and what the workflow needs to implement, is whether the existing position is held to maturity or unwound, and who decides.

Failure modes, framed so you can plan around them.

  • Aggregating exposure by account rather than by credit. This is the most common shape of the problem and it is quiet, because every individual number is right. Four accounts, a fund and a repo can all lead back to entities under one parent. A report that lists them separately shows six modest positions where the policy would see one large one.
  • Treating a money market fund as interchangeable with a deposit. They sit next to each other on the cash line and behave differently under stress. A government fund is outside the mandatory liquidity fee. An institutional prime or tax exempt fund carries a fee obligation once daily net redemptions exceed 5 percent of net assets, unless liquidity costs are de minimis. Recording the fund category is a small field with a large consequence.
  • Assuming deposit insurance does meaningful work at corporate scale. The FDIC insures deposits to at least 250,000 dollars per insured bank. For a corporate balance that is a detail rather than a protection, and a policy that mentions insurance without a limit behind it is describing comfort rather than control.
  • Letting the rating go stale without noticing. A rating field with no date is the easiest kind of decay to miss, because the check keeps passing. The remedy is mechanical: store the agency and the date, and treat an old rating as an exception in its own right rather than as a valid input.
  • Checking only after the placement. A daily exposure report is useful and it is not a control. The money has moved, and unwinding a placement costs spread and attention. The same limit logic invoked before the placement turns the finding into a prompt.
  • Storing exceptions but not clean results. A control that writes a row only when something is wrong cannot prove it ran. Silence then means either a good day or a broken job, and in an audit the two look identical.
  • Modelling a repo with one counterparty field. A repurchase agreement carries the dealer on one side and the collateral issuer on the other. Collapsing them loses the distinction the policy usually cares about most, and it does so in a way that makes the exposure look better than it is.
  • Holding limits as percentages without recording the denominator. Twenty five percent of the portfolio is a moving target, and the same position passes or fails depending on what else was held that day. Store the denominator used, so a historical result can be explained rather than re-derived.
  • Leaving the sweep out of the picture. An operating account that sweeps overnight is reported as a deposit and is something else by the time the day ends. Where the sweep target is not part of the record, the overnight concentration is invisible to the very check designed to catch it.
  • Treating the policy document as the system of record. When the limits live in a PDF and the check lives in a workbook, the two drift, and the drift is only discovered when someone compares them. The document should be generated from the limit table, or at minimum the table should carry the clause reference, so a difference is a visible mismatch.

What this asks of the data model.

  • The counterparty is a legal entity with a parent, not a name. Key the counterparty master on a legal entity identifier and store the direct parent and ultimate parent links alongside it. The GLEIF API returns exactly those relationships, together with branches and managed funds, which covers the two hard cases: a branch that trades under a local name, and a fund whose manager is the credit the policy is really thinking about.
  • Instruments need a redemption model, not a type label. Two fields carry most of the weight: how liquidity is obtained (on demand from an issuer, by redeeming from a fund, by selling into a market, or at contractual maturity) and what can interrupt it (a cut off time, a fee, a settlement cycle, a thin market). A type label such as money market fund answers neither.
  • Limits are rows with effective dates, and the effective date is the part that gets forgotten. A limit is a subject, a basis, a value and a window of time in which it applied. Without the window, a check result from three months ago cannot be reconciled to the policy that governed it, and every policy revision rewrites history.
  • Ratings carry an agency and an as of date. Store rating at acquisition and current rating as separate facts on separate rows rather than as one field that is overwritten. A policy that tests eligibility at purchase and monitoring thereafter needs both, and overwrite loses the first one permanently.
  • Trade date, settlement date and value date are three different things. Exposure begins at trade date. Cash moves at settlement date. A forecast keyed on value date and an exposure report keyed on trade date will disagree, correctly, and the model should let them.
  • A repurchase agreement needs two counterparty fields. The cash counterparty and the collateral issuer are separate credits with separate limits. Model the haircut and whether the transaction is centrally cleared on the same row, because the SEC clearing mandate reaches eligible repo transactions from 30 June 2027 and the cleared flag becomes a reportable attribute rather than a detail.
  • Sweep relationships belong on the account record. An account that sweeps has a target, a threshold and a time. Holding those three fields lets the overnight position be computed from the daytime one, rather than requiring a second feed that arrives late or not at all.
  • Check results are records, with the inputs that produced them. Store the limit version, the denominator, the exposure computed, the result and the timestamp. A stored pass is evidence. A recomputed pass is an assertion, because the inputs have moved since.
  • Exceptions are first class rows with an owner and an expiry. An approved breach needs the limit it breached, the amount, the reason, who approved it, when, and the date the approval lapses. Held as an email thread, it is a recollection. Held as a row, the expiry can be queried and the list of live exceptions is a real artefact.
  • Currency and entity have to travel with every position. A group limit that quietly mixes currencies, or that aggregates across legal entities that cannot actually lend to each other, produces a number that is arithmetically correct and operationally meaningless. Carry the holding entity and the currency on the row and convert explicitly, with the rate and the date.

The evidence to keep.

  • The investment policy as it stood on the date in question, with a version identifier, the approval that put it in force and the date it took effect.
  • The limit table as of that same date, with each row traceable to the clause of the policy it implements, so the check that ran can be tied to the document that authorised it.
  • The daily check results for the period, including the passing days, each one carrying the limit version, the portfolio denominator, the computed exposure and the timestamp of the run.
  • The counterparty master extract, showing each counterparty’s legal entity identifier, its parent links and the group under which its exposures were aggregated.
  • The rating history for each counterparty and instrument held during the period, with the agency and the as of date for each observation, and the eligibility conclusion drawn at acquisition.
  • The pre trade check log, showing placements that were proposed and the result returned before the money moved, including any that were declined by the check.
  • The exception register, listing each accepted breach with the limit, the amount, the reason, the approver, the approval date and the expiry, together with evidence of what happened at expiry.
  • The instrument master for the holdings in the portfolio, recording the redemption mechanics relied on, so that the liquidity assumption in the cash forecast can be traced to a stated attribute rather than to custom.
  • The reconciliation from the positions used in the exposure calculation to the cash and cash equivalents and short term investment balances reported in the accounts, so the control and the financial statements describe the same portfolio.
  • The record of policy changes during the period, showing what changed, who approved it and from which date, with the corresponding change to the limit rows.

Questions worth asking in your own review.

  • If someone asked for our total exposure to a single banking group right now, including deposits, funds managed by that group and any repo where it is the cash counterparty, how long would that take and who would assemble it?
  • Is our investment policy readable by anything other than a person? Could a system answer whether a proposed placement is inside it?
  • For each holding, do we know whether a redemption can carry a fee, and is that recorded anywhere other than in the fund documents nobody has opened since onboarding?
  • When did we last refresh the credit ratings behind our counterparty limits, and would we be able to tell if one had gone stale?
  • Does our concentration check run before a placement or after it, and what happens to the finding in each case?
  • Can we produce evidence that the check ran and passed on a specific day three months ago, or only that no exception was raised?
  • Where an operating account sweeps overnight, does our exposure report show the daytime balance or the overnight position?
  • If a counterparty were downgraded tomorrow, does the policy say what happens to positions we already hold, and does anyone own that decision?
  • Do we have accepted exceptions with no expiry date, and if so, when were they last looked at?
  • Does the portfolio used for the exposure calculation reconcile to the cash and short term investment balances we report externally?

What this adds up to.

The policy question is settled in most companies. Three in four have written one down, the risk appetite in it has been argued through and approved, and nobody needs convincing that concentration limits are sensible. That is the expensive part of the work and it is already done. What remains is a translation problem, and translation problems reward ordinary engineering rather than new thinking.

The operating payoff is larger than the compliance one. A treasury that can name every counterparty, roll each exposure up to the credit group behind it, state how each holding redeems and on what cut off, and show a stored check result for every day of the quarter has built something that serves several purposes at once. The cash forecast gets more honest, because liquidity assumptions are traceable to instrument attributes. The audit gets shorter, because the evidence already exists in the shape the auditor wants. And a downgrade or a stressed market becomes a query rather than a scramble, which is the only time anyone finds out whether the work was done.

If there is one place to start, it is the counterparty master. Take the current list of holdings, attach a legal entity identifier and a parent to each counterparty, and compute the group exposures once. Most teams find one or two groupings they had not seen, and those are worth knowing about on an ordinary Tuesday rather than on an interesting one. Everything else in this article builds on that table, and it is a week of work rather than a project.

Sources.

Every figure attributed to the 2026 AFP Liquidity Survey was read from the Association for Financial Professionals press release of 16 June 2026 announcing it, fetched as a file and read directly rather than through a summary. The survey covers 309 treasury professionals at US organisations and was fielded in March 2026, so it describes US practice at that date and nothing broader. Statements about money market fund mechanics come from the SEC fact sheet accompanying Release No. 33-11211, downloaded and read page by page, and corroborated against the Commission’s press release of 12 July 2023. The Treasury clearing compliance dates come from the SEC press release of 25 February 2025, and the current implementation position from Commissioner Uyeda’s statement of 20 April 2026, both read directly. The deposit insurance statement comes from the FDIC resource page. The legal entity identifier relationship fields were confirmed by querying the public GLEIF API for a live record rather than described from memory. No public post on X is cited in this article: a search for current, relevant and verifiable practitioner or regulator posts on corporate investment policy limits and the 2026 liquidity data did not produce one that could be confirmed as authentic and on point, and an unverified embed is worse than none. The record shapes in this article are worked illustrations of structure, and every identifier, rating, amount and entity name in them is a placeholder rather than a real holding or counterparty. Nothing here is investment advice or accounting advice for any particular company, and the obligations that apply to any regulated fund or intermediary come from the rules themselves rather than from this article.