Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
57 lines
2.7 KiB
Bash
Executable File
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
|