multi-currency-and-advanced-currency-management
Use when designing or reviewing Salesforce multi-currency behavior, especially irreversible activation, `CurrencyIsoCode`, `convertCurrency()`, dated exchange rates, and Advanced Currency Management tradeoffs. Triggers: 'multi currency', 'advanced currency management', 'CurrencyIsoCode', 'dated exchange rate', 'convertCurrency'. NOT for ordinary numeric field calculations with no currency conversion or reporting concern.
Best use case
multi-currency-and-advanced-currency-management is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when designing or reviewing Salesforce multi-currency behavior, especially irreversible activation, `CurrencyIsoCode`, `convertCurrency()`, dated exchange rates, and Advanced Currency Management tradeoffs. Triggers: 'multi currency', 'advanced currency management', 'CurrencyIsoCode', 'dated exchange rate', 'convertCurrency'. NOT for ordinary numeric field calculations with no currency conversion or reporting concern.
Teams using multi-currency-and-advanced-currency-management should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/multi-currency-and-advanced-currency-management/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How multi-currency-and-advanced-currency-management Compares
| Feature / Agent | multi-currency-and-advanced-currency-management | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when designing or reviewing Salesforce multi-currency behavior, especially irreversible activation, `CurrencyIsoCode`, `convertCurrency()`, dated exchange rates, and Advanced Currency Management tradeoffs. Triggers: 'multi currency', 'advanced currency management', 'CurrencyIsoCode', 'dated exchange rate', 'convertCurrency'. NOT for ordinary numeric field calculations with no currency conversion or reporting concern.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Multi Currency And Advanced Currency Management Use this skill when currency is no longer just a formatting concern. Multi-currency and Advanced Currency Management change how data is stored, queried, reported, and explained to the business. The most important design rule is to respect currency context instead of smuggling in hardcoded assumptions about one corporate currency. --- ## Before Starting Gather this context before working on anything in this domain: - Is multi-currency already enabled, and if not, has the team understood that activation is irreversible? - Does the requirement involve Opportunity reporting, forecasting, rollups, or Apex calculations that depend on exchange rates? - Does the consumer need the stored transaction currency, the user's currency, or dated historical conversion? --- ## Core Concepts ### Activation Changes The Data Model Once multi-currency is enabled, currency context becomes part of the record model through `CurrencyIsoCode` and exchange-rate behavior. Teams should stop assuming every `Amount` field is implicitly the same currency everywhere. ### `CurrencyIsoCode` Is Not Optional Context When Apex or integrations move money-like values around, the ISO code matters. A number without its currency context is usually incomplete business data. ### `convertCurrency()` Serves A Different Need `convertCurrency()` is for returning values converted into the running user's currency context in SOQL. It is different from preserving the stored transactional currency and should be chosen intentionally. ### Advanced Currency Management Adds Time Dimension ACM uses dated exchange rates for supported use cases such as opportunity reporting. That improves historical correctness, but it also changes reporting and summary expectations. Designs that ignore the time dimension eventually confuse finance and sales users. --- ## Common Patterns ### Currency-Aware Query Pattern **When to use:** Apex or reporting logic must display both amount and currency context clearly. **How it works:** Query `CurrencyIsoCode` with the amount fields you expose and use `convertCurrency()` only when the user-currency projection is the actual requirement. **Why not the alternative:** Returning bare amounts encourages silent conversion mistakes downstream. ### Historical Reporting With ACM **When to use:** The business needs dated exchange-rate behavior for historical opportunity analysis. **How it works:** Enable ACM deliberately and document which reports and summaries change meaning under dated rates. ### Integration DTO With Currency Context **When to use:** Money values leave Salesforce through Apex or integration payloads. **How it works:** Include both the amount and the ISO code rather than sending a bare decimal. --- ## Decision Guidance | Situation | Recommended Approach | Reason | |---|---|---| | Org needs multiple transactional currencies | Multi-currency | Core platform support for currency context | | Historical opportunity reporting needs dated conversion | ACM | Adds time-aware exchange-rate behavior | | Apex exposes money values externally | Include `CurrencyIsoCode` with amount | Prevents silent interpretation errors | | User-facing query wants viewer-currency projection | `convertCurrency()` | Returns user-context converted values | --- ## Recommended Workflow Step-by-step instructions for an AI agent or practitioner activating this skill: 1. Gather context — confirm the org edition, relevant objects, and current configuration state 2. Review official sources — check the references in this skill's well-architected.md before making changes 3. Implement or advise — apply the patterns from Core Concepts and Common Patterns sections above 4. Validate — run the skill's checker script and verify against the Review Checklist below 5. Document — record any deviations from standard patterns and update the template if needed --- ## Review Checklist Run through these before marking work in this area complete: - [ ] Activation and irreversibility implications are understood. - [ ] Apex and integrations preserve currency context, not just numeric values. - [ ] `CurrencyIsoCode` is queried or propagated where needed. - [ ] `convertCurrency()` is used only when user-currency projection is intended. - [ ] ACM implications for reporting, rollups, and finance users are documented. - [ ] Hardcoded single-currency assumptions are challenged. --- ## Salesforce-Specific Gotchas Non-obvious platform behaviors that cause real production problems: 1. **Multi-currency activation is irreversible** - teams must treat it as an architectural decision, not a casual setting toggle. 2. **Amounts without ISO context are misleading** - Apex and integrations often lose meaning when they move only decimals. 3. **`convertCurrency()` is not the same as preserving stored currency** - it serves a different consumer need. 4. **ACM changes historical reporting expectations** - the business must understand why values differ over time. --- ## Output Artifacts | Artifact | Description | |---|---| | Currency design review | Findings on activation, conversion, reporting, and Apex handling | | Query guidance | Pattern for stored-currency versus converted-currency retrieval | | ACM decision | Recommendation for when dated exchange rates are justified | --- ## Related Skills - `data/roll-up-summary-alternatives` - use when parent totals and rollups become the main implementation issue. - `apex/custom-metadata-in-apex` - use when exchange-rate or currency-routing config belongs in metadata-driven logic. - `integration/oauth-flows-and-connected-apps` - use when the main blocker is external finance-system authentication rather than currency semantics.
Related Skills
session-management-and-timeout
Use this skill when configuring session timeout values, concurrent session limits, session IP locking, or logout behavior in Salesforce. Covers org-wide session settings, profile-level overrides, Connected App session policies, and Metadata API SecuritySettings deployment. NOT for OAuth token refresh flows, login IP ranges, or MFA/identity-provider configuration.
oauth-token-management
Use when work depends on how Salesforce OAuth access and refresh tokens are issued, refreshed, rotated, revoked, or introspected for a Connected App or API client—including unexpected logouts, invalid_grant after refresh, or designing token incident response. NOT for choosing which OAuth grant or Connected App flow to implement (use integration/oauth-flows-and-connected-apps), Named Credential packaging (use integration/named-credentials-setup), or broad Connected App IP and PKCE policy hardening without a token-lifecycle angle (use security/connected-app-security-policies).
certificate-and-key-management
Use this skill when creating, uploading, or rotating certificates in Salesforce, configuring mutual TLS (mTLS) client authentication, managing the Java KeyStore for CA-signed certificates, diagnosing certificate expiry in JWT OAuth flows, or understanding which certificate types Salesforce supports and how to migrate them between orgs. NOT for Named Credential configuration (use named-credentials-setup skill), NOT for Shield Platform Encryption key management. Trigger keywords: Certificate and Key Management, self-signed certificate, CA-signed certificate, mutual TLS, mTLS, keystore, JKS, PKCS12, certificate rotation, certificate expiry, JWT certificate.
omnistudio-multi-language
Localize OmniScripts, FlexCards, and DataRaptors using Label-based translation, multi-language JSON, and locale-aware number/date formatting. NOT for Salesforce Translation Workbench alone.
flexcard-state-management
Use when designing FlexCard actions, conditional visibility, and state that must survive navigation, refresh, or parent/child card transitions. Triggers: 'flexcard state', 'flexcard conditional visibility', 'flexcard actions', 'flexcard refresh', 'child flexcard state'. NOT for raw LWC state or for OmniScript step state.
lwc-state-management
Share state across LWCs using pub/sub, Lightning Message Service, @wire, and reactive stores. NOT for in-component reactivity.
lwc-focus-management
Use when building LWCs that need to manage focus explicitly — modal dialogs, wizard flows, dynamic inserts, list updates, error summaries, and focus after async work. Covers focus restoration, focus traps, programmatic focus across shadow DOM, and patterns for announcing changes to assistive tech. Does NOT cover general LWC a11y audit (see lwc-accessibility).
lwc-datatable-advanced
Advanced lightning-datatable patterns — inline edit + draftValues, custom cell types via extending LightningDatatable, sortable columns, infinite scroll with onloadmore, row-level errors, and the cost of large data sets. NOT for read-only display of small lists (plain lightning-datatable suffices) or fully custom grids (use a third-party library).
experience-cloud-multi-idp-sso
Use this skill when configuring multiple identity providers (OIDC and/or SAML) on a single Experience Cloud site or across tenant-specific portals in the same org — covering auth provider registration, Start SSO URL routing, Federation ID mapping, RegistrationHandler implementation, and simultaneous SP+IdP topology. Trigger keywords: multiple identity providers Experience Cloud, multi-tenant SSO community portal, vendor and citizen portal same site, OIDC SAML both on login page, tenant-specific login routing community. NOT for internal Salesforce employee SSO configuration. NOT for single auth provider setups — see experience-cloud-authentication for basic SSO.
revenue-lifecycle-management
Use this skill when implementing or troubleshooting Salesforce Revenue Lifecycle Management (RLM) — the native Revenue Cloud product covering order-to-cash lifecycle, Dynamic Revenue Orchestrator (DRO) fulfillment plan design, asset amendments, billing schedule creation via Connect API, and invoice management. Triggers on: Dynamic Revenue Orchestrator, RLM order decomposition, DRO fulfillment swimlanes, native Revenue Cloud billing schedule, asset lifecycle management Salesforce. NOT for CPQ quoting or pricing rules (use cpq-* skills), not for the legacy Salesforce Billing managed package with blng__* objects (different product entirely), not for standard Order objects without Revenue Cloud features.
loyalty-management-setup
Use this skill when setting up or extending Salesforce Loyalty Management — including program and currency creation, tier group design, qualifying vs. non-qualifying point currency separation, DPE batch job activation, partner loyalty configuration, and member portal setup on Experience Cloud. Triggers on: Loyalty Management setup, loyalty tier setup Salesforce, qualifying points vs redemption points, DPE batch job for loyalty, partner loyalty program Salesforce, loyalty member portal. NOT for Marketing Cloud engagement program design (separate product), not for B2B loyalty via Sales Cloud (standard opportunity, not loyalty program), not for general Experience Cloud site setup (use experience-cloud-setup skill).
scratch-org-management
Use this skill when designing, configuring, or troubleshooting scratch orgs: definition file structure, edition selection, allocation limits, Org Shape, CI automation via ScratchOrgInfo, and lifecycle management from the Dev Hub. NOT for SFDX CLI basics (use sf-cli-and-sfdx-essentials), sandbox management, or production org administration.