Skip to content

feat(oracle-epm): add Profitability and Cost Management integration - #7541

Open
BillLeoutsakosvl346 wants to merge 1 commit into
feat/oracle-epm-foundationfrom
investigate/oracle-epm-profitability-cost-management-integration
Open

feat(oracle-epm): add Profitability and Cost Management integration#7541
BillLeoutsakosvl346 wants to merge 1 commit into
feat/oracle-epm-foundationfrom
investigate/oracle-epm-profitability-cost-management-integration

Conversation

@BillLeoutsakosvl346

@BillLeoutsakosvl346 BillLeoutsakosvl346 commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add Oracle EPM Profitability and Cost Management (PCM) with 20 tools and credential-bound input/output file selectors. This targets Cloud Management Ledger PCM (/epm/rest/v1), distinct from Enterprise Profitability and Cost Management (EPCM, /HyperionPlanning/rest/v3) and on-premises Profitability APIs.
  • Stacked directly on feat(oracle-epm): add guarded foundation #7469 (feat/oracle-epm-foundation, 9e738a3b021bbfb2c1c065ee1a7f241a4c41fdfc). feat(oracle-epcm): add enterprise profitability integration #7503 is an architectural precedent only. Product contracts, task interpretation, and PCM inbox/outbox workflows remain in the child; transport, credential resolution, route/link guards, polling, and authorized file helpers come from the foundation.
  • Keep one cumulative child commit so manually dispatched CI compares the complete PCM change against its foundation parent. No shared runtime, authentication redesign, generator, workflow, or unrelated integration changes.

API evidence and supported workflows

Official Cloud PCM REST chapter. Requires a provisioned PCM environment under an eligible Enterprise or legacy PCM subscription; EPM Standard and EPCM applications are outside this block's boundary.

All product routes below use the case-sensitive /epm/rest/v1 prefix. POST fields are JSON; application/POV names are path parameters. Optional fields are omitted when absent. Documented string scalar payloads are preserved; report flags use native JSON booleans.

Tools Documented route / contract
create_application POST fileApplications/{app}: description, rule and balance dimension names
enable_application POST fileApplications/{app}/enableApplication
deploy_cube POST applications/{app}/jobs/ledgerDeployCubeJob: keep/replace flags, immediate execution, comment
update_dimensions POST fileApplications/{app}/jobs/updateDimension: staged filenames, optional delimiter and decrease threshold
load_data POST applications/{app}/jobs/essbaseDataLoadJob: staged input file, clear flag, add/overwrite behavior
run_calculation POST applications/{app}/povs/{pov}/jobs/runLedgerCalculationJob: all rules, ordered rule-set range, or named rule; distinct data POV requires all rules
copy_pov POST applications/{app}/povs/{source}/jobs/copyPOVJob/{destination}: rules/input data, destination creation, delimiter, optional model view and tuple optimization
clear_pov POST applications/{app}/povs/{pov}/jobs/clearPOVJob: selected rules/data or query-scoped input data
get_rule_balancing GET applications/{app}/povs/{pov}/ruleBalance: JSON-encoded queryParameter query field with model view and delimiter; project documented scalar items fields
generate_program_documentation POST applications/{app}/povs/{pov}/jobs/programDocReportJob: format, filename, filters, optional range and aliases
export_query_results POST applications/{app}/jobs/exportQueryResultsJob: named query or application data, compression/format options, validated JSON-string member filters
import_template POST applications/{app}/jobs/templateImportJob: staged template, description, explicit overwrite flag
apply_data_grants, merge_slices, optimize_cube POST applications/{app}/jobs/applyDataGrants, mergeSlices, optimizeASOCube; operation pages and official Java/cURL samples in the PCM chapter establish JSON bodies, including ASO query tracking and aggregation actions
get_task_status, wait_for_task GET applications/jobs/ChecktaskStatusJob/{processName}; shared bounded polling, cancellation propagation, resumable timeout output
upload_file POST /interop/rest/11.1.2.3.600/applicationsnapshots/{filename}/contents, binary body and extDirPath=profitinbox query parameter; authorized source file
list_files GET /interop/rest/v2/files/list, restricted to ordinary PCM inbox/outbox files; preserves exact names and maps documented size/time metadata
download_file GET /interop/rest/11.1.2.3.600/applicationsnapshots/{repositoryPath}/contents, listed ordinary file only, canonical UserFile, 100 MiB ceiling

Submissions expose a task identifier only from a validated Job Status GET link, never from descriptive details text. PCM migration statuses mean -1 pending, 0 success, and every positive code failed, including 2. Waits never resubmit mutations and retain processName after timeout.

Most PCM operations and task reads require Service Administrator or Power User. Creating an application requires Service Administrator. Report/query exports accept all application roles, but waiting still requires the task-read roles. File tools/selectors require Service Administrator or an application role with Migrations – Administer.

Scope and limitations

  • No inferred application, POV, model, rule, or query discovery/CRUD; these names remain manual inputs. No general administration or duplicate transport/storage implementations.
  • Template export remains deferred because Oracle's request placement is inconsistent. Ambiguous extra copy flags and undocumented nested rule-balancing fields remain unexposed.
  • File selectors are only oracleEpmPcm.inputFiles and oracleEpmPcm.outputFiles. Full repository paths must fit the existing 255 UTF-8-byte route limit for download; listings preserve longer names while selectors omit unusable options.
  • Reuse NetSuiteIcon, oracle-epm-service-account, and the neighboring sibling internal-directory convention. Generated artifacts stay within the agreed file tree.
  • Inspected precedents: EPCM bed723964c3b0d3c43cb5baa7f7fbf0f33d467e1, Platform 1326c095987b52266df5a3016da5f3aa76d76de9, Planning e09af0946e80909b2bcf9942345cbbadbfc4310e, Data Integration 88ba4393035ca80db813d2ca46cd5c1c21a4f942.

Type of Change

  • New integration

Testing

Validated on GitHub at 4e18e8ee9f006f145c202b74837955dbd7328f7a: Test and Build run passed all four jobs: Lint and Test, both auxiliary test shards, and the application build. The main job passed repository audits, generated-artifact checks, and workspace type checks before its test shard. Focused PCM tests cover operation contracts, task interpretation, bounded waits/cancellation, authorized files and limits, dispatch, selectors, and credential/manifest registration.

Independent review using validate-integration, validate-selector, and memory-load-check examined the child plus inherited foundation and approved the final revision. Greptile reports 5/5 on that same SHA; all review threads are resolved. The upload-preflight finding was withdrawn after Oracle's documented server-side non-overwrite guarantee was established.

No local tests, lint, type checks, builds, or live Oracle operations were run. Only the necessary artifact generators ran locally; formatting corrections came from GitHub diagnostics and source edits. Cubic is excluded from the completion gate.

Shared observations about consuming-tool credential-provider binding and catalog display for API-key-classified service accounts remain outside this child. No missing foundation capability was established. No file-tree deviations.

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel

vercel Bot commented Sep 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 6, 2026 12:05am UTC

Request Review

@BillLeoutsakosvl346

Copy link
Copy Markdown
Contributor Author

@greptile

@greptile-apps

greptile-apps Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds an Oracle EPM Profitability and Cost Management integration with twenty operations covering application management, calculations, POV workflows, reports, task polling, and credential-bound repository file handling.

  • Registers the integration across blocks, tools, selectors, credentials, documentation, and deployment metadata.
  • Reuses the Oracle EPM foundation for authenticated transport, link validation, polling, and authorized file storage.
  • Adds focused contract tests for operation payloads, task interpretation, polling limits, repository workflows, and selectors.
  • Recent revisions tighten integer validation for polling budgets and export precision while primarily reformatting generated tool definitions.

Confidence Score: 5/5

The PR appears safe to merge, with no outstanding correctness, security, or repository-rule violations identified.

The changes consistently validate operation inputs, preserve credential boundaries, constrain file workflows, validate returned task links, and retain resumable polling behavior. The prior upload-conflict concern was correctly withdrawn after the server-side non-overwrite contract and error handling were established.

Important Files Changed

Filename Overview
apps/sim/lib/internal/oracle-epm-profitability/operations.ts Defines validated PCM operation contracts, request payload construction, and normalized submission handling.
apps/sim/lib/internal/oracle-epm-profitability/jobs.ts Implements task status retrieval and bounded polling with integer wait-budget validation.
apps/sim/lib/internal/oracle-epm-profitability/files.server.ts Implements authorized PCM repository listing, upload, and size-limited download workflows.
apps/sim/lib/selectors/server/providers/oracle-epm-profitability.ts Provides credential-bound inbox and outbox selectors while filtering unusable repository paths.
apps/sim/blocks/blocks/oracle_epm_profitability.ts Defines the integration block UI, operation-specific fields, and input/output metadata.
apps/sim/tools/registry.ts Registers all twenty Oracle PCM tools with the application tool catalog.
apps/docs/content/docs/integrations/oracle_epm_profitability.mdx Documents supported PCM operations, permissions, parameters, outputs, and workflow limitations.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  W[Workflow block] --> T[Oracle PCM tool]
  T --> D[Internal operation dispatcher]
  D --> A[Oracle EPM authenticated client]
  A --> P["PCM /epm/rest/v1 APIs"]
  A --> R["Repository /interop/rest APIs"]
  P --> J[Task processName]
  J --> S[Get status or bounded wait]
  R --> F[profitinbox / profitoutbox]
  F --> U[Authorized Sim UserFile]
Loading

Reviews (4): Last reviewed commit: "feat(oracle-epm): add Profitability and ..." | Re-trigger Greptile

Comment thread apps/sim/lib/internal/oracle-epm-profitability/files.server.ts Outdated
@BillLeoutsakosvl346
BillLeoutsakosvl346 force-pushed the investigate/oracle-epm-profitability-cost-management-integration branch from 29db7cc to e44574b Compare September 5, 2026 23:55
@BillLeoutsakosvl346

Copy link
Copy Markdown
Contributor Author

@greptile

@BillLeoutsakosvl346
BillLeoutsakosvl346 force-pushed the investigate/oracle-epm-profitability-cost-management-integration branch from e44574b to c1abba5 Compare September 6, 2026 00:01
@BillLeoutsakosvl346

Copy link
Copy Markdown
Contributor Author

@greptile

@BillLeoutsakosvl346
BillLeoutsakosvl346 force-pushed the investigate/oracle-epm-profitability-cost-management-integration branch from c1abba5 to 4e18e8e Compare September 6, 2026 00:03
@BillLeoutsakosvl346

Copy link
Copy Markdown
Contributor Author

@greptile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant