Set up default currency accounts automatically (#72)
This commit is contained in:
1 parent
62df9eac5f
commit
5c255296d3
21 files changed
+675
-62
No files matched your search
+36
-7
@@ -52,22 +52,50 @@ coordinated deployment of the platform's financial services.
|
||||
|
||||
Reuse `api.sendico` and its existing Vault-rendered token file. Do not put provider
|
||||
credentials or organization/source settings in Flutter. Provision the integration
|
||||
account's organization membership, payment-create/read, ledger-account/balance
|
||||
read and the permissions needed to resolve its stored payment methods. Verify
|
||||
account's organization membership, payment-create/read, ledger-account create/read,
|
||||
balance read and the permissions needed to resolve its stored payment methods. Verify
|
||||
those permissions in the intended environment before enabling real operations.
|
||||
|
||||
Through Sendico's existing operator APIs, provision one dedicated unowned
|
||||
organization ledger per customer currency, with active `asset` / `operating`
|
||||
semantics, no negative balance and metadata:
|
||||
### Automatic currency accounts (#72)
|
||||
|
||||
The backend ensures **RUB, USDT and USDC** accounts after confirmed identity intake
|
||||
during signup, before sending the activation email. Resending activation retries
|
||||
the same setup. Every authenticated wallet load also ensures the defaults, so
|
||||
existing customers receive missing accounts automatically when they next open
|
||||
their wallet. This is lazy backfill, not an eager scan of dormant customers.
|
||||
|
||||
Setup creates dedicated unowned organization ledgers through the public
|
||||
`POST /ledger_accounts/{organization}` API, with active `asset` / `operating`
|
||||
semantics, zero initial funds, no negative balance and metadata:
|
||||
|
||||
| Ledger metadata | Meaning |
|
||||
| --- | --- |
|
||||
| `sxchnge_subject_ref` | Confirmed independent subject reference from sign-up |
|
||||
| `external_subject_ref` | Same confirmed subject; provider-enforced organization/subject/currency uniqueness |
|
||||
| `sxchnge_payout_method_ref` | Optional prevalidated same-currency saved payout method |
|
||||
| `sxchnge_payout_label` | Safe customer-visible destination label, e.g. bank plus masked suffix |
|
||||
| `sxchnge_funding_method_ref` | Optional same-currency saved funding source supported by the platform route |
|
||||
|
||||
These are financial-resource bindings maintained by trusted provisioning, not
|
||||
Existing customer ledgers and their balances are preserved, including manually
|
||||
provisioned ledgers with the original `sxchnge_subject_ref` tag. Only missing
|
||||
defaults are created; existing additional currencies remain visible. Repeated
|
||||
bound creates reuse the ledger and resume Sendico's durable wallet/route setup
|
||||
after an interrupted response. Frozen, duplicate or incorrectly owned bindings
|
||||
fail instead of creating a replacement. All required currency precision entries
|
||||
are checked against the provider catalog before issuing creates. Saved funding
|
||||
and payout bindings remain separate from creation of the currency accounts.
|
||||
|
||||
Deploy [Sendico #2968](https://git.sendico.io/tech/sendico/issues/2968) first:
|
||||
Ledger (including its unique index), then Product Edge, then SXCHNGE backend and
|
||||
frontend from [task #72](https://git.sendico.io/tech/sxchnge/issues/72). The public
|
||||
ledger list must advertise `externalSubjectAccounts: true` before SXCHNGE sends
|
||||
any create requests. Older providers fail safely without creating accounts.
|
||||
The acknowledgement assumes Ledger and Edge are deployed in that order; it
|
||||
does not discover the version of a separately running Ledger. No new runtime
|
||||
configuration or credentials are introduced. Existing deployments must give the
|
||||
integration principal the ledger-create permission in addition to its reads.
|
||||
|
||||
These are financial-resource bindings maintained by server-side setup, not
|
||||
client choices or new runtime configuration. Do not tag a pooled/integration-login
|
||||
ledger as a customer ledger. Do not place full bank/card details or secret values
|
||||
in labels or metadata. The BFF checks subject, organization, account type, role,
|
||||
@@ -79,7 +107,8 @@ review action. Funding uses a quote for the provisioned stored source; it does
|
||||
not mint money or treat demo top-ups as real deposits. Additional destinations,
|
||||
recipient onboarding and other funding instructions remain separate features.
|
||||
|
||||
An empty set of provisioned ledgers is an empty wallet. Existing organization
|
||||
If setup reports a failure, the API returns an unavailable wallet rather than an
|
||||
empty snapshot or demo balances. Retrying the app load retries setup. Existing organization
|
||||
payments and pooled balances are never imported into customer history. This
|
||||
integration exposes the durable operations initiated through this BFF, with live
|
||||
provider reconciliation; independent inbound deposits/history ingestion and
|
||||
|
||||
Reference in new issue
Block a user