Files
proxmox/scripts/omnl/resolve_ids.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

86 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# OMNL Fineract — Resolve GL account IDs (1410, 2100, 2410) and payment type ID; write ids.env for downstream scripts.
# Usage: from repo root, source omnl-fineract/.env then run: bash scripts/omnl/resolve_ids.sh
# Output: ids.env in current directory (export ID_1410, ID_2100, ID_2410, PAYMENT_TYPE_ID). Exits non-zero if any missing.
# See docs/04-configuration/mifos-omnl-central-bank/OPERATING_RAILS.md
set -euo pipefail
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
OUT_FILE="${OMNL_IDS_FILE:-ids.env}"
if [ -f "${REPO_ROOT}/omnl-fineract/.env" ]; then
set +u
source "${REPO_ROOT}/omnl-fineract/.env" 2>/dev/null || true
set -u
elif [ -f "${REPO_ROOT}/.env" ]; then
set +u
source "${REPO_ROOT}/.env" 2>/dev/null || true
set -u
fi
: "${OMNL_FINERACT_BASE_URL:?Set OMNL_FINERACT_BASE_URL (e.g. in omnl-fineract/.env)}"
: "${OMNL_FINERACT_TENANT:=omnl}"
: "${OMNL_FINERACT_USER:=app.omnl}"
: "${OMNL_FINERACT_PASSWORD:?Set OMNL_FINERACT_PASSWORD}"
BASE="${OMNL_FINERACT_BASE_URL}"
TENANT="${OMNL_FINERACT_TENANT}"
AUTH="-u ${OMNL_FINERACT_USER}:${OMNL_FINERACT_PASSWORD}"
HDR=(-H "Fineract-Platform-TenantId: ${TENANT}" -H "Content-Type: application/json")
GL_JSON="$(curl -s "${HDR[@]}" $AUTH "$BASE/glaccounts")"
# Normalize to array (Fineract may return { pageItems: [...] } or [...])
GL_JSON="$(echo "$GL_JSON" | jq -c 'if type == "array" then . else (.pageItems // .) end' 2>/dev/null || echo "$GL_JSON")"
PT_JSON="$(curl -s "${HDR[@]}" $AUTH "$BASE/paymenttypes")"
PT_JSON="$(echo "$PT_JSON" | jq -c 'if type == "array" then . else (.pageItems // []) end' 2>/dev/null || echo "[]")"
id_for_glcode() {
local code="$1"
echo "$GL_JSON" | jq -r --arg c "$code" '.[]? | select(.glCode == $c) | .id' 2>/dev/null | head -n1
}
ID_1410="$(id_for_glcode "1410")"
ID_2100="$(id_for_glcode "2100")"
ID_2410="$(id_for_glcode "2410")"
# Prefer: onledger/cash/bank transfer; fallback first payment type
PAYMENT_TYPE_ID="$(
echo "$PT_JSON" | jq -r '
(.[]? | select((.code // "") | ascii_downcase == "onledger") | .id) // empty
' 2>/dev/null | head -n1
)"
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
PAYMENT_TYPE_ID="$(
echo "$PT_JSON" | jq -r '
(.[]? | select((.name // "") | ascii_downcase | test("cash|bank|wire|transfer")) | .id) // empty
' 2>/dev/null | head -n1
)"
fi
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
PAYMENT_TYPE_ID="$(echo "$PT_JSON" | jq -r '.[0].id // empty' 2>/dev/null)"
fi
for v in ID_1410 ID_2100 ID_2410; do
val="${!v}"
if [ -z "$val" ] || [ "$val" = "null" ]; then
echo "Missing required id: $v (create GL accounts first, e.g. omnl-gl-accounts-create.sh)" >&2
exit 1
fi
done
if [ -z "$PAYMENT_TYPE_ID" ] || [ "$PAYMENT_TYPE_ID" = "null" ]; then
echo "Warning: no payment type found; PAYMENT_TYPE_ID will be empty (deposits/disbursements may need it)" >&2
PAYMENT_TYPE_ID=""
fi
cat > "$OUT_FILE" <<EOF
# OMNL Fineract resolved IDs — do not commit if it contains env-specific values
# Generated by scripts/omnl/resolve_ids.sh
export ID_1410=$ID_1410
export ID_2100=$ID_2100
export ID_2410=$ID_2410
export PAYMENT_TYPE_ID=$PAYMENT_TYPE_ID
EOF
echo "Wrote $OUT_FILE:" >&2
cat "$OUT_FILE" >&2