Files
proxmox/scripts/omnl/omnl-client-create-pt-cakra-investama.sh
defiQUG 7ac74f432b chore: sync docs, config schemas, scripts, and meta task alignment
- Institutional / JVMTM / reserve-provenance / GRU transport + standards JSON
- Validation and verify scripts (Blockscout labels, x402, GRU preflight, P1 local path)
- Wormhole wiring in AGENTS, MCP_SETUP, MASTER_INDEX, 04-configuration README
- Meta docs, integration gaps, live verification log, architecture updates
- CI validate-config workflow updates

Operator/LAN items, submodule working trees, and public token-aggregation edge
routes remain follow-up (see TODOS_CONSOLIDATED P1).

Made-with: Cursor
2026-03-31 22:31:39 -07:00

117 lines
5.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# OMNL Fineract — Corporate Client for PT. CAKRA INVESTAMA INTERNATIONAL (office CAKRA).
# Idempotent by client externalId. Adds contact (director), NPWP as "Any Other Id Type" if not present.
#
# Usage (repo root):
# DRY_RUN=1 bash scripts/omnl/omnl-client-create-pt-cakra-investama.sh
# bash scripts/omnl/omnl-client-create-pt-cakra-investama.sh
#
# Optional env:
# CAKRA_OFFICE_EXTERNAL_ID default OMNL-ID-JKT-CAKRA-001
# CAKRA_CLIENT_EXTERNAL_ID default OMNL-ID-JKT-CAKRA-CLIENT
# CAKRA_CLIENT_NAME default PT. CAKRA INVESTAMA INTERNATIONAL
# CAKRA_CONTACT_EMAIL default bambangpram04@gmail.com
# CAKRA_CONTACT_MOBILE default +62811400001
# CAKRA_NPWP default 08.540.442.4-603.000
# SKIP_NPWP_IDENTIFIER=1 skip NPWP POST (e.g. if using another id type in tenant)
#
# Settlement / bank / AHU metadata: scripts/omnl/data/pt-cakra-investama-sidecar.json (not Fineract-native).
set -euo pipefail
REPO_ROOT="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
DRY_RUN="${DRY_RUN:-0}"
CAKRA_OFFICE_EXTERNAL_ID="${CAKRA_OFFICE_EXTERNAL_ID:-OMNL-ID-JKT-CAKRA-001}"
CAKRA_CLIENT_EXTERNAL_ID="${CAKRA_CLIENT_EXTERNAL_ID:-OMNL-ID-JKT-CAKRA-CLIENT}"
CAKRA_CLIENT_NAME="${CAKRA_CLIENT_NAME:-PT. CAKRA INVESTAMA INTERNATIONAL}"
CAKRA_CONTACT_EMAIL="${CAKRA_CONTACT_EMAIL:-bambangpram04@gmail.com}"
CAKRA_CONTACT_MOBILE="${CAKRA_CONTACT_MOBILE:-+62811400001}"
CAKRA_NPWP="${CAKRA_NPWP:-08.540.442.4-603.000}"
SKIP_NPWP_IDENTIFIER="${SKIP_NPWP_IDENTIFIER:-0}"
SUBMITTED_DATE="${SUBMITTED_DATE:-$(date +%Y-%m-%d)}"
LEGAL_FORM_ID="${LEGAL_FORM_ID:-2}"
# shellcheck source=lib/omnl-fineract-common.sh
source "${REPO_ROOT}/scripts/omnl/lib/omnl-fineract-common.sh"
omnl_fineract_load_env
omnl_fineract_init_curl || exit 1
offices_json=$(curl "${CURL_OPTS[@]}" "${BASE_URL}/offices" 2>/dev/null)
OFFICE_ID=$(echo "$offices_json" | jq -r --arg e "$CAKRA_OFFICE_EXTERNAL_ID" '.[] | select(.externalId == $e) | .id' 2>/dev/null | head -1)
if [ -z "$OFFICE_ID" ] || [ "$OFFICE_ID" = "null" ]; then
echo "Office not found for externalId=$CAKRA_OFFICE_EXTERNAL_ID — run omnl-office-create-pt-cakra-investama.sh first." >&2
exit 1
fi
clients_wrap=$(omnl_fineract_fetch_all_clients_pageitems)
existing_id=$(echo "$clients_wrap" | jq -r --arg e "$CAKRA_CLIENT_EXTERNAL_ID" '.pageItems[] | select(.externalId == $e) | .id' 2>/dev/null | head -1)
if [ -n "$existing_id" ] && [ "$existing_id" != "null" ]; then
CLIENT_ID="$existing_id"
echo "Client already exists: clientId=$CLIENT_ID (externalId=$CAKRA_CLIENT_EXTERNAL_ID)" >&2
else
payload=$(jq -n \
--argjson officeId "$OFFICE_ID" \
--argjson legalFormId "$LEGAL_FORM_ID" \
--arg firstname "$CAKRA_CLIENT_NAME" \
--arg externalId "$CAKRA_CLIENT_EXTERNAL_ID" \
--arg submittedOnDate "$SUBMITTED_DATE" \
'{
officeId: $officeId,
legalFormId: $legalFormId,
firstname: $firstname,
lastname: ".",
externalId: $externalId,
dateFormat: "yyyy-MM-dd",
locale: "en",
active: false,
submittedOnDate: $submittedOnDate
}')
if [ "$DRY_RUN" = "1" ]; then
echo "DRY_RUN: would POST /clients $payload" >&2
exit 0
fi
res=$(curl "${CURL_OPTS[@]}" -X POST -d "$payload" "${BASE_URL}/clients" 2>/dev/null) || true
if echo "$res" | jq -e '.resourceId // .clientId' >/dev/null 2>&1; then
CLIENT_ID=$(echo "$res" | jq -r '.resourceId // .clientId')
echo "Created client clientId=$CLIENT_ID" >&2
else
echo "Failed to create client: $res" >&2
exit 1
fi
fi
if [ "$DRY_RUN" = "1" ]; then
exit 0
fi
# Contact (director channel)
payload_contact=$(jq -n --arg m "$CAKRA_CONTACT_MOBILE" --arg e "$CAKRA_CONTACT_EMAIL" '{ mobileNo: $m, emailAddress: $e }')
curl "${CURL_OPTS[@]}" -X PUT -d "$payload_contact" "${BASE_URL}/clients/${CLIENT_ID}" >/dev/null 2>&1 || true
# NPWP — tenant allows one active "Any Other Id Type" (id 4) per client
if [ "$SKIP_NPWP_IDENTIFIER" != "1" ] && [ -n "$CAKRA_NPWP" ]; then
if omnl_fineract_client_has_document_key "$CLIENT_ID" "$CAKRA_NPWP"; then
echo "NPWP identifier already present on client $CLIENT_ID" >&2
else
has_other=$(curl "${CURL_OPTS[@]}" "${BASE_URL}/clients/${CLIENT_ID}/identifiers" 2>/dev/null | jq -e '
(if type == "array" then . else (.pageItems // []) end)
| map(select((.documentType?.name // "") == "Any Other Id Type" and (.status == "Active" or .status == null)))
| length > 0
' >/dev/null 2>&1 && echo yes || echo no)
if [ "$has_other" = "yes" ]; then
echo "Skip NPWP POST: client already has an active Any Other Id Type (store AHU/NPWP detail in sidecar or deactivate old id)." >&2
else
payload_npwp=$(jq -n --arg key "$CAKRA_NPWP" --argjson typeId 4 '{ documentKey: $key, documentTypeId: $typeId, description: "NPWP (Indonesia tax ID)", status: "Active" }')
res=$(curl "${CURL_OPTS[@]}" -X POST -d "$payload_npwp" "${BASE_URL}/clients/${CLIENT_ID}/identifiers" 2>/dev/null) || true
if echo "$res" | jq -e '.resourceId' >/dev/null 2>&1; then
echo "Posted NPWP identifier for client $CLIENT_ID" >&2
else
echo "NPWP POST skipped or failed: $res" >&2
fi
fi
fi
fi
echo "CLIENT_ID_CAKRA=$CLIENT_ID"
echo "Sidecar (banking, AHU, compliance placeholders): ${REPO_ROOT}/scripts/omnl/data/pt-cakra-investama-sidecar.json" >&2