Files
proxmox/scripts/omnl/omnl-je-maker.sh
defiQUG b3a8fe4496
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
chore: sync all changes to Gitea
- Config, docs, scripts, and backup manifests
- Submodule refs unchanged (m = modified content in submodules)

Made-with: Cursor
2026-03-02 11:37:34 -08:00

57 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# OMNL — Maker: write single JE payload + sha256 for checker (maker-checker).
# Usage: OFFICE_ID=20 DEBIT_GL_ID=... CREDIT_GL_ID=... AMOUNT=... REF=... [COMMENTS=...] bash scripts/omnl/omnl-je-maker.sh
# Aliases: REFERENCE_NUMBER=REF, TX_DATE=TRANSACTION_DATE. For ≥10M set REQUIRES_APPROVAL=1 and APPROVER=<name>.
# Output: reconciliation/je-<ref>.payload.json and .payload.sha256
set -euo pipefail
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
PAYLOAD_DIR="${PAYLOAD_DIR:-${REPO_ROOT}/reconciliation}"
REF="${REF:-$REFERENCE_NUMBER}"
TRANSACTION_DATE="${TRANSACTION_DATE:-$TX_DATE}"
TRANSACTION_DATE="${TRANSACTION_DATE:-$(date +%Y-%m-%d)}"
: "${OFFICE_ID:?Set OFFICE_ID}"
: "${DEBIT_GL_ID:?Set DEBIT_GL_ID}"
: "${CREDIT_GL_ID:?Set CREDIT_GL_ID}"
: "${AMOUNT:?Set AMOUNT}"
: "${REF:?Set REF or REFERENCE_NUMBER (referenceNumber)}"
COMMENTS="${COMMENTS:-JE from maker}"
MATERIAL_THRESHOLD_MAKER_CHECKER="${MATERIAL_THRESHOLD_MAKER_CHECKER:-10000000}"
# Material policy: if amount >= threshold, require REQUIRES_APPROVAL=1 and APPROVER
if [ "${AMOUNT:-0}" -ge "${MATERIAL_THRESHOLD_MAKER_CHECKER}" ] 2>/dev/null; then
if [ "${REQUIRES_APPROVAL:-0}" != "1" ] || [ -z "${APPROVER:-}" ]; then
echo "Maker: amount >= $MATERIAL_THRESHOLD_MAKER_CHECKER requires REQUIRES_APPROVAL=1 and APPROVER=<name>" >&2
exit 1
fi
fi
mkdir -p "$PAYLOAD_DIR"
safe_ref=$(echo "$REF" | tr -c 'A-Za-z0-9_-' '_')
payload_file="${PAYLOAD_DIR}/je-${safe_ref}.payload.json"
hash_file="${PAYLOAD_DIR}/je-${safe_ref}.payload.sha256"
body=$(jq -n \
--argjson officeId "$OFFICE_ID" \
--arg transactionDate "$TRANSACTION_DATE" \
--arg dateFormat "yyyy-MM-dd" \
--arg locale "en" \
--arg currencyCode "USD" \
--arg comments "$COMMENTS" \
--arg referenceNumber "$REF" \
--argjson debitId "$DEBIT_GL_ID" \
--argjson creditId "$CREDIT_GL_ID" \
--argjson amount "$AMOUNT" \
'{ officeId: $officeId, transactionDate: $transactionDate, dateFormat: $dateFormat, locale: $locale, currencyCode: $currencyCode, comments: $comments, referenceNumber: $referenceNumber, debits: [ { glAccountId: $debitId, amount: $amount } ], credits: [ { glAccountId: $creditId, amount: $amount } ] }')
# Append approvalMetadata for material postings (checker enforces; Fineract ignores unknown fields)
if [ "${AMOUNT:-0}" -ge "${MATERIAL_THRESHOLD_MAKER_CHECKER}" ] 2>/dev/null && [ -n "${APPROVER:-}" ]; then
body=$(echo "$body" | jq --arg approver "$APPROVER" --arg approvedAt "$(date -u -Iseconds)" \
'. + { approvalMetadata: { approver: $approver, approvedAt: $approvedAt } }')
fi
echo "$body" > "$payload_file"
sha256sum "$payload_file" | awk '{print $1}' > "$hash_file"
echo "Maker: wrote $payload_file and $hash_file" >&2