#!/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" <&2 cat "$OUT_FILE" >&2