Expand description
Append-only audit trail for the credit registration ledger.
No retention sweep touches this table, so every Suotar payload must go through
scrub_suotar_body at the write site β redacting on read would leave the raw values on disk.
StructsΒ§
- Credit
Registration Event - Error
Code Window Counts - One error codeβs standing over a window and the window before it.
- NewCredit
Registration Event - NotImproved
Attainment - The attainment the study registry pointed at when it turned a submission down as no improvement.
- Suotar
Item Outcome Totals - How the study registry answered the items it was asked about in a window.
EnumsΒ§
ConstantsΒ§
- NEVER_
SCANNED_ πKEYS - Keys whose values the value scan must leave alone: they carry ids shaped like student numbers β
cr-{uuid}request item ids, Sisu ids such ashy-CUR-135176012β that the scan would mangle. - REDACTED
- Replaces a redacted value; the key is kept so the payload shape survives.
- REDACTED_
KEYS π - Keys whose values identify a person or authenticate a request. Matched case-insensitively at any depth.
StaticsΒ§
- EMAIL_
RE π - STUDENT_
NUMBER_ πRE - Student-number-shaped digit runs. The id shapes come first because the
regexcrate has no lookaround: leftmost-first alternation is the only way to say βdigits not part of an idβ. The word boundaries keep the digit branch off longer numbers such as millisecond timestamps.
FunctionsΒ§
- count_
item_ outcomes_ since - Per-item outcomes in
[since, now), counted over events rather than rows: an item that failed really failed, whatever its row has since become. - get_
by_ registration_ id - The per-item timeline, newest first.
- get_
by_ suotar_ api_ call_ id - The per-item timeline entries one study registry call produced, oldest first: what the answer did to each row it covered.
- get_
error_ code_ counts_ for_ window - Error events per code over
[now - 2 * window, now), split atnow - window. - get_
ids_ with_ several_ submitted_ attainments - Registrations whose answers named more than one submitted attainment id, which is the shape a double submission would leave behind.
- get_
not_ improved_ attainment - The registryβs verdict for a row it declined as no improvement.
Nonefor every other row, and for one whose answer named no attainment. - get_
recent_ by_ kind - insert
- Callers that also change
statemust go throughcredit_registrations::transitioninstead, which writes both in one transaction. - insert_
batch - Inserts the same event on many rows in one round trip.
Appends one event per element, in one statement. The column list is
insertβs, so a batch writes the same rows a loop would. - insert_
many - keep_
scalars π - Keeps bare ids and lists of ids, but hands objects back to
scrubso an exemption cannot smuggle a nested error message past the value scan. - key_
policy π - normalize_
key π - scrub π
- scrub_
free_ πtext - scrub_
suotar_ body - Best-effort removal of personal data from a Suotar request or response body. Not a guarantee and not an exhaustive PII filter.
- scrub_
text - Scrubs a bare error message with the same rules as a JSON body.
- string_
field π - suotar_
exchange_ details - Both sides of a Suotar exchange, scrubbed on construction so there is no way to build an
unscrubbed
details. The request is kept because the ledger row no longer reflects it after a retry.