#ifndef BOKF_LEDGER_H #define BOKF_LEDGER_H #include #include #include struct ledger_row { const char *account; int64_t debit_ore; int64_t credit_ore; const char *description; }; struct ledger_error { const char *code; char msg[512]; int has_details; int64_t difference_ore; }; struct ledger_post_opts { int64_t org_id; int64_t user_id; int64_t token_id; const char *date; const char *description; const char *series; /* NULL -> "A" */ const struct ledger_row *rows; size_t nrows; int64_t corrects_voucher_id; /* 0 = none */ const int64_t *attachment_ids; size_t n_attachments; const char *client_ref; /* NULL = none */ int dry_run; const char *source; /* NULL -> "manual" or "agent" */ }; int ledger_post(sqlite3 *db, const struct ledger_post_opts *o, struct ledger_error *e, char **out_result_json); /* Appends the canonical bytes for a voucher hash (SCHEMA.md 7.1) and returns the 32-byte hash. */ void ledger_voucher_hash(const unsigned char prev[32], int64_t org_id, const char *fy_label, const char *series, int64_t number, const char *date, const char *description, const struct ledger_row *rows, size_t nrows, unsigned char out[32]); #endif