Search This Blog

Showing posts with label Tools. Show all posts
Showing posts with label Tools. Show all posts

Tuesday, June 9, 2026

Building an AI-Driven Oracle Fusion Cloud Analysis Tool: What We Learned Along the Way

If you work with Oracle Fusion Cloud and have ever felt like you need more insights when it comes to data quality, process health, or IDR performance, you are not alone. The Oracle ecosystem is rich, but the gap between "we have the data" and "we actually understand what the data is telling us" can be enormous. This post walks through how we built a Python-based analysis pipeline called Catalyst AI Lab that connects directly to Oracle Fusion Cloud REST APIs and surfaces actionable findings automatically, and how AI-assisted development made the whole thing possible in a fraction of the time it would have taken otherwise.

The Problem Worth Solving

Our team supports Oracle Fusion Cloud across ERP, EPM and HCM. Like most teams, we spent a lot of time answering the same questions: Why is our Straight-Through Processing rate lower than expected? Are there duplicate suppliers in the system? Which business units have the most unresolved invoice holds, and how old are those holds? Among many other existential questions!

The answers exist in Oracle. The REST APIs are well-documented enough to get started. But building something repeatable and systematic that could answer these questions reliably, across environments, and produce a report someone could actually act on -- that is a different project entirely.

The goal was to build a tool that behaves like a knowledgeable consultant running a discovery engagement: it goes into the system, looks at the data from multiple angles, identifies what is worth paying attention to, and tells you why it matters.

The Architecture: Discovery Lenses

We organized the analysis into what I call discovery lenses. Each lens is a focused analytical perspective that targets a specific domain. The IDR Invoice Processing lens, for example, looks at STP rates, hold root causes, duplicate invoices, supplier-level IDR success, and per-BU performance breakdowns. The Supplier Data Quality lens looks at the entire supplier master for duplicates, missing site attributes, banking configuration gaps, tax registration coverage, and cross-BU payment term consistency.

Each lens follows the same pattern: connect to Oracle, fetch the relevant data via REST API, run analysis, produce structured findings with severity levels, confidence scores, and remediation guidance, then export everything to an HTML report and supporting CSV files for drill-down in Excel.

The framework is extensible. Adding a new lens means creating one Python file, decorating a class with @register_lens, and adding configuration to a YAML file. No changes to the core pipeline needed.

Agentic Development: What It Actually Looks Like

I want to be honest about what AI-assisted development meant on this project, because there is a lot of noise around this topic.

The GitHub Copilot agent in VS Code was not just writing boilerplate. I was having extended conversations with it about Oracle API behavior, asking it to review findings for accuracy, having it run the pipeline against our dev environment and then analyze the results, and using it to write and fix tests. When a finding was surfaced with a remediation recommendation that turned out to be wrong (more on that below), we flagged it, the agent researched the correct Oracle Cloud guidance, and we updated both the code and the best practices configuration together.

The workflow looked like this: I would describe what I wanted to understand about the data. The agent would research the Oracle REST API structure, write the lens code, run the pipeline, and report back with results. Then we would review the output together, identify what was accurate, what was misleading, and what needed more nuance. That iterative loop is where the real value was. It compressed weeks of work into days.

The test suite ended up at 632 tests covering pagination behavior, finding logic, report generation, CLI commands, and end-to-end pipeline execution. Having the agent write those tests alongside the features meant I could refactor confidently.

Oracle REST API: Things You Will Not Find in the Quick Start

This is the section I wish existed when we started.

First, pagination. Oracle Fusion Cloud REST APIs use offset/limit pagination with a default page size of 100 records. That is straightforward. What is not obvious is that if you want Oracle to tell you how many total records exist, you have to explicitly pass totalResults=true as a query parameter on your request. Without it, the API returns your page of data but gives you no indication of the overall population size. We were calculating STP rates against a 20,000-invoice sample before realizing we had 275,180 invoices YTD. That is a 7.3% sample, which changes how you interpret the findings significantly.

The fix was simple once we understood it: on the first page request, add totalResults=true to the query string. Oracle then returns the estimated row count in the response, and you can surface that alongside your findings as a population coverage metric. Every finding now shows something like "analyzed 20,000 of 275,180 invoices (7.3% coverage)" so the reader understands the confidence level of what they are seeing.

Second, filter syntax on certain resources. Oracle's REST API supports query filters using a SCQL-style syntax, which is powerful for many resources. But for invoiceHolds specifically, we discovered that compound filters with semicolons are silently ignored. You cannot filter by multiple conditions in a single request on that resource. The API accepts the request without error, applies no filter at all, and returns unfiltered data. If you are not paying attention, you will think your filter worked and analyze the wrong dataset. The workaround is to fetch the broader dataset and filter in application code.

Third, the OpenAPI specification files for Oracle Fusion Cloud are enormous. The five files covering ERP Financials, PPM, Procurement, Common, and HCM total nearly 400MB. You cannot parse those with standard JSON libraries without running into memory issues. The solution was ijson, a streaming JSON parser that lets you walk through the spec without loading it all into memory at once.

Fourth, credentials. Oracle Cloud API credentials need to be stored securely. The pipeline uses OS keyring integration (Windows Credential Manager on Windows, Keychain on Mac) so passwords are never in plain text files, never in environment variables that might get logged, and never in source control. This is worth doing properly from the start because once you have multiple environments and multiple team members, credential hygiene matters.

What the Analysis Actually Found

Running the full pipeline against our Prod clone environment produced some results worth highlighting, both because they illustrate what this kind of tool can surface and because they validate the approach. Below are a couple of material examples.

On the IDR side: our overall STP rate looked reasonable at the summary level, but the per-BU breakdown showed significant variance. Several business units were well below the industry benchmark. That variance was invisible in aggregate reporting. The hold analysis showed issues, which is a cash flow concern that should have been caught in normal operations.

On the supplier side: analyzing all suppliers at 100% population coverage found many potential duplicate supplier groups, duplicate addresses, and active suppliers flagged as Do Not Use. The real value is that the tool gives you a prioritized, evidence-backed list to work through rather than asking someone to manually review a spreadsheet with thousands of rows.


Click on the image to expand it~

Lessons on Accuracy and Iteration

One thing I want to be direct about: the first version of several remediation recommendations in the tool were wrong. Not wrong in a subtle way -- wrong in the sense that they referenced Oracle lookup values that do not exist in standard Cloud instances, or recommended configuration changes that would break other functionality.

This happened because the AI was drawing on general Oracle knowledge that did not perfectly match Oracle Cloud specifically. The fix was systematic: review every finding's remediation guidance against actual Oracle Cloud documentation and lived experience, update the best practices configuration file that drives the recommendations, and add tests that assert the correct guidance is present.

That iteration process is not a failure of AI-assisted development. It is how the process is supposed to work. The agent accelerates construction; human expertise and domain knowledge ensure correctness. If you skip the review step, you will ship wrong recommendations at scale. If you do the review, you end up with something accurate and fast.

How You Can Apply This to Your Environment

The pattern generalizes beyond the specific lenses we built. If you support Oracle Fusion Cloud in any capacity, you almost certainly have questions you are answering manually today that could be answered systematically with this approach.

Start with one question you care about. What is your PO-backed invoice percentage? How many suppliers have incomplete site setup? What is the distribution of expense report approval times across business units? Pick something with a clear Oracle REST API resource behind it, build a focused analysis around it, validate the results against what you know to be true, and iterate from there.

The Oracle REST API surface area is large enough that you can build meaningful analytics across almost any domain without needing a data warehouse, a separate reporting tool, or an extract from production. The data is there. The APIs are there. The AI tooling to help you build something coherent on top of them is better than it has ever been.

The repository for this project is internal to our organization, but the patterns, the Oracle API gotchas, and the architectural approach are all things you can apply independently. If you are working on something similar or have questions about the Oracle-specific pieces, drop a comment below. I am happy to go deeper on any of it.

Sunday, July 6, 2025

AI Enhances Oracle Cloud HCM Support: Elevating Insight with the Oracle HCM Intel CLI

Oracle Gen AI + Public HCM Metadata = Limitless Insight

The Oracle HCM Intel CLI Tool is a professional-grade command-line assistant that uses your extracted HCM metadata and combines it with the capabilities of Oracle’s OCI Generative AI service (powered by Cohere) or OpenAI, or the LLM of your choice, giving you intelligent insights relative to HCM data structures. And it's all done securely and locally—no sensitive data leaves your environment.

By referencing public HCM data definitions, this project demonstrates just how powerfully Oracle Gen AI, and other AI offerings, can be applied in the enterprise to support analysts, developers, and architects with tasks such as:

  • Generating SQL queries based on natural language
  • Suggesting joins between key Oracle HCM tables
  • Explaining and optimizing existing SQL
  • Creating BI Publisher-ready templates
  • Performing semantic metadata searches

Project GitHub: oracle_hcm_intel_cli
Demo: Watch Demo

Built With Practical Enterprise Needs in Mind

The tool includes features that any real-world implementation would benefit from:

  • Encrypted .env handling using runtime secrets
  • Markdown output for reporting or Copilot/Teams usage
  • Audit mode for logging what metadata was passed to the LLM
  • Modular provider support for OpenAI or Oracle Gen AI
  • Interactive prompt chaining for analysts and non-developers

It’s optimized for real users working in real environments—offering flexibility without sacrificing security or precision.


Powered by Oracle Technology, Honoring Oracle’s Vision

This CLI tool is powered by Oracle’s own public documentation and showcases the capabilities of Oracle Cloud Infrastructure’s Generative AI platform. It's a clear example of how AI and metadata can be responsibly applied in the enterprise, especially when building tooling around Oracle’s HCM ecosystem.

Oracle’s Gen AI service is the star of the show here—it brings context, comprehension, and creative query generation to the hands of business users and technical professionals alike.

Earlier this month, I introduced a Metadata Extractor CLI Tool built to programmatically parse Oracle Cloud HCM’s public documentation and extract table and view metadata into JSON format. That foundational tool—available on GitHub at oracle_hcm_metadata_extractor—has enabled this powerful second act: the Oracle HCM Intel CLI.


Get Started

  1. Extract metadata using: oracle_hcm_metadata_extractor

  2. Query and explore with: oracle_hcm_intel_cli

Whether you’re working in HCM data architecture, reporting, or support—this is your AI-powered sidekick.


I hope this project inspires others to build upon Oracle’s cloud platform and apply Generative AI responsibly. The future of enterprise tooling is intelligent, secure, and deeply integrated—and with Oracle Gen AI, that future is now.

—
Julio @ OracleSpot.net

Tuesday, June 24, 2025

Introducing the Oracle HCM Fast Formula Agent – Built with AI to Help You Work Smarter

Introducing the Oracle HCM Fast Formula Agent – Built with AI to Help You Work Smarter

After months of juggling fast formulas, fielding questions from HR teams, and trying to decode cryptic payroll logic at 2AM, I decided it was time to build something better.

Today, I'm happy to share an open-source project that came from that journey:

Oracle HCM Fast Formula Agent – A smart, simple tool that uses Generative AI to help you generate, validate, explain, and modify Oracle HCM Fast Formulas, and more!

Check out a quick demo - Watch on Loom

Why I Built It

Working in the Oracle Cloud HCM space, I saw firsthand how challenging it can be to:

  • Interpret legacy Fast Formulas written years ago
  • Validate logic across hundreds of conditional paths
  • Explain formula outcomes to business users
  • Generate new formulas based on complex rules, under tight deadlines

And with the rise of AI, I thought: Why not build an assistant that understands Oracle HCM and speaks "formula"?

What It Does

With this Flask-based app, you can:

✅ Generate new Fast Formulas from plain-English descriptions
✅ Explain existing formulas in readable, line-by-line language
✅ Validate and suggest corrections for logic/syntax errors
✅ Modify formulas based on user input
✅ Extend the tool with new advanced actions using a plugin system, like the included Summarize advanced action!

It even has a clean admin panel and a dark mode toggle because... well, late-night debugging deserves a good theme.

📦 Plugin Architecture

Want to add your own action like summarize_formula or compare_logic_blocks? Just drop it in the plugins/ folder. No changes to the main app required. It's built for extensibility.

🐳 Docker Ready

Whether you’re developing locally or deploying in the cloud, the app comes with a Dockerfile that runs the app via Gunicorn for production-grade performance.

🔗 Get Started

Clone it, run it, or fork it for your own use:

👉 GitHub: https://github.com/TheOwner-glitch/hcm-fast-formula-agent
📹 Demo: Watch the video

A Call to the Oracle Community

I built this for consultants, analysts, and developers who need to move fast and support critical Oracle HCM needs in the Fast Formula space, but more importantly to share an example of how AI Powered application development can be compelling and reduce the need for conditional and hardcoded business logic by instead leveraging the power of generative AI  to interpret natural language. If you try it out and find it helpful, or have ideas for improving it, I’d love to collaborate.

Thanks for reading. Now go automate your fast formula headaches away.

- Julio

Tuesday, October 1, 2024

UML Diagrams For Productivity and Clarity

Following up on the last two entries regarding using Python to interact with Oracle MySQL and Oracle Linux, I want to introduce a tool called PlantUML, which is a fantastic tool for creating visual aids to help your development journey, and we will create a simple UML diagram for the Python UI that we discussed in the last entry, for monitoring various services. We will also take a look at a couple of Class Diagrams for a couple of Kafka Consumer and Producer services.

Before getting to the diagram and the UML code, let's talk about how to run PlantUML locally on your machine using VS Code.

VS Code

Install VS code, it’s free.

https://code.visualstudio.com/download

Plant UML Extension


In VS code, go to the extensions marketplace, and install the PlantUML Extension.

You also need to have Java JRE on your machine, install that as well from: https://www.java.com/en/download/manual.jsp


Diagram Previews

To use it, create a new text file in VS Code, and then select PlantUml as the language. Then paste the UML code, and hit “alt + d”, to open the preview screen. You can then copy images.




Now, let's look at some examples, including one following up on our Python Monitoring UI referenced in the last blog entry.

UI Diagram


@startuml

!define RECTANGLE_SIZE_SIZE_RECTANGLE 12
skinparam componentStyle rectangle
skinparam rectangle {
  BackgroundColor<<main>> LightGray
  BackgroundColor<<option>> White
  BorderColor<<main>> Black
  BorderColor<<option>> Gray
}

rectangle "Python UI - Homepage" <<main>> {
    rectangle "Kafka Status" <<option>> 
    rectangle "Zookeeper Status" <<option>> 
    rectangle "MySQL Status" <<option>> 
    rectangle "Map View" <<option>> 
}

@enduml



Class Diagram - Consumer

Diagram depicting a consumer service in a Kafka architecture for a vehicle telemetry system.

@startuml

class KafkaConsumer {

    +consumeMessage()

    +parseJSON(String message)

    +processData(SchoolBusData busData)

}

class SchoolBusData {

    +happenedAtTime: String

    +assetId: String

    +latitude: float

    +longitude: float

    +headingDegrees: int

    +accuracyMeters: float

    +gpsSpeedMetersPerSecond: float

    +ecuSpeedMetersPerSecond: float

}

class DatabaseConnector {

    +insertSchoolBusData(SchoolBusData busData)

}

KafkaConsumer --> SchoolBusData : Parses

KafkaConsumer --> DatabaseConnector : Inserts into

DatabaseConnector --> MySQLDatabase : Stores

 

class MySQLDatabase {

    +save()

}

@enduml


Class Diagram - Producer

@startuml

class KafkaProducer {

    +produceMessage()

    +serializeToJSON(SchoolBusData busData)

    +sendToKafka(String jsonMessage)

}

class SchoolBusData {

    +happenedAtTime: String

    +assetId: String

    +latitude: float

    +longitude: float

    +headingDegrees: int

    +accuracyMeters: float

    +gpsSpeedMetersPerSecond: float

    +ecuSpeedMetersPerSecond: float

    +generateSampleData(): SchoolBusData

}

KafkaProducer --> SchoolBusData : Generates

KafkaProducer --> KafkaTopic : Sends message

class KafkaTopic {

    +receiveMessage(String jsonMessage)

}

@enduml


These are a couple of types of diagrams that you can create using PlantUML in VS Code, in another entry we will be covering a couple of different diagrams, including a sequence diagram, regarding a proposed architecture for getting data out of Oracle Fusion Cloud.

Monday, May 25, 2020

Oracle Cloud Development for Free!


Let's explore some Oracle Cloud Development capabilities! Some of which are free! I will cover the OCI Marketplace and Free Offerings there in a separate post, but there's an introduction to it at the end of this article. hashtag#oci hashtag#oracle hashtag#clouddevelopment hashtag#oraclecloud hashtag#backendwebdevelopment




I wrote this blog post in LinkedIn, so go to the link below to read it:

https://www.linkedin.com/pulse/oracle-cloud-development-free-julio-lois/

Sunday, May 24, 2020

EBS Integration Repository and eTRM


As a lot of companies and users shift their focus towards the Cloud Products, sometimes it's easy to forget that an enormous number of customer still utilize EBS and will continue to do so for years to come. As such, those customers will continue to integrate their EBS environments with other systems, like early payment engines, OCR engines, tax engines, third party SCM systems, other ERP's and more. The following two resources are extremely powerful when planning integration work for EBS, and I have leveraged them countless times.

First, I wanted to remind everyone that the Integration Repository responsibility in EBS is a great resource to see whether there is already an Oracle API to accomplish a specific task. Please make use of it when building solutions to address customer needs or if you have doubts in regards to whether the vendor you are working with for your project, or your own development team, is building a custom function for an existing standard function or procedure, as you always want to leverage seeded functionality that will be supported by Oracle and doesn't break when upgrades happen.

For those that are not familiar with the Integration Repository, you simply need to add it as a responsibility under your user and browse the different modules to drill down to the specific service interface you want to look at. Once you drill into a specific API, you will see a list of the details including function names, parameters, rules, and much more.

Browsing the repository:



  • I am showing Projects related API's in the screenshot.

Additionally, remember the Oracle eBusiness Suite Electronic Technical Reference Manual (eTRM), is also available to us with our Oracle Support accounts.

This one is especially useful to see EBS database design and dependency information, you can also browse the FND model and the Data Dictionary with it! This is an extremely powerful tool to see what happens to those database objects that you rely on when upgrades occur, as those changes will likely impact your custom concurrent programs, reports, alerts, and other extensions.


EBS Seeded Comparison Reports

Hello everyone, I haven’t written about EBS in a while since I’ve been focused on the Cloud products, but I wanted to bring to your attention the below seeded reports provided by Oracle which can be used to compare environments with different patch sets, to better assess the impact of applying those patches/upgrades and see differences at a low level. This is as relevant as ever since EBS patching hasn’t slowed down, and many new features continue to come in.

Below are descriptions of each report with the respective Oracle notes with all the relevant information. Most of the content and report description come straight from Oracle Support, the idea is to consolidate them here for your awareness.

They are all very useful, and one of them specially is of interest to me and I have used it extensively in order to compare different ATG versions to assess impact and help build a test plan. The ATG patch family is important because EBS continues to enhance through different avenues like enhanced Mobile support and the Enterprise Command Centers, and these rely heavily on your ATG readiness.

The EBS File Comparison Report provides a comprehensive comparison of file system artifacts between different Oracle E-Business Suite releases for important file types. As part of Oracle E-Business Suite upgrade planning, this report can assist customers to get a clear idea of "what is different in a new release" (additions, removals and modifications for Oracle E-Business Suite delivered files).

The report also covers some special artifacts that span the file system and database (for example, Oracle E-Business Suite delivered Oracle Application Framework (OAF) personalizations, Oracle Application Framework (OAF) based pages, Oracle Business Intelligence Publisher reports and so on).The EBS File Comparison Report is intended to complement other already available reports such as EBS Data Model Comparison report and EBS ATG Seed Data Comparison report.

The EBS data model comparison report provides the static database object definition changes between two EBS releases to help users to preview the database object definition changes before upgrading their instances from one release to another and understand the impact of the database object changes that may affect the customization or business flows. Users can select a product and navigate the database object definition differences for each supported database object type.

The EBS ATG Seed Data Comparison Report provides a static delta between different EBS releases by documenting the seed data changes delivered by the product data loader files (.ldt extension) based on EBS ATG loader control (.lct extension) files.

The below Oracle Notes cover how to install and navigate the reports. All of these Oracle docs continue to get updated as releases occur and support up to 12.2.9 has been delivered for each of the below:

o EBS Data Model Comparison Report Overview (Doc ID 1290886.1)
o EBS File Comparison Report [VIDEO] (Doc ID 1446430.1)
o EBS ATG Seed Data Comparison Report (Doc ID 1327399.1)

Tuesday, January 8, 2019

E-Business Suite Support Analyzer Bundle Menu Tool and Automatically Updating Analyzers

If you support Oracle EBS R12 then you are familiar with the Oracle Analyzers. They are essentially reports that were designed by Oracle Support to assist with diagnosing issues by providing detailed analysis and even some potential solutions, like applying a relevant generic data fix or suggesting a patch. These analyzers can also speed up your response time when creating an SR by providing the outputs for the relevant analyzers in a product family when you initiate the SR.

The issue with the Analyzers is that there are a lot of them, and maintaining them can become difficult. This is because Analyzers are basically scripts that can be ran manually by your DBA or can be setup to run as a concurrent program (not all Analyzers allow for this). What this means is that it's time consuming to install analyzers and configure them to be ran as concurrent programs and then keeping them up to date, as Oracle releases new versions of the packages behind said Analyzers rather often.

Here is where the Bundle Analyzer tool comes into play. It makes it easy to install all the available Analyzers from a menu that can be easily navigated and utilized by a System Administrator or DBA. You can also quickly load and register analyzers as concurrent programs and also have the ability to uninstall them. Basically, the tool provides a simple interface that makes it really easy to perform these tasks.

You also don't need to worry about data integrity, per Oracle, "Application data is not altered in any way when the Analyzer Bundle Menu is installed or when any Support Analyzer is run."

What this allows you to do, as a support team, is quickly spinning up the analyzers you want to use and update them on a regular basis, maybe when you do your releases, or anytime you wish and as time allows. One of the features of the tool is that you can bulk load all analyzers in a given EBS product family or even all analyzers in all families, as well as individual analyzers, if you don't want to complicate matters by having unnecessary capabilities.

The installation steps are very simple for any DBA or System Administrator, and all the steps are outlined in the below note provided by Oracle:

E-Business Suite Support Analyzer Bundle Menu Tool (Doc ID 1939637.1)

Now, while the Bundle tool greatly simplifies this effort of obtaining analyzers and updating them, there’s still manual work involved, and many of us have asked whether there's some way to automate this further.

In response, Oracle has now released a new feature allowing concurrent programs to be scheduled to address updating analyzers using the bundle tool. This can allow you to automate updating your existing analyzers on a regular basis without human intervention.

All the details in regards to this valuable enhancement to the Analyzer Bundle tool can be seen in the below note provided by Oracle. The note contains all the details around the two concurrent programs involved in the Auto Update feature and how it works.

E-Business Suite Support Analyzer Bundle AutoUpdate Concurrent Program (Doc ID 2377353.1)

This is an extremely powerful tool that can truly enhance your capabilities to support your customers proactively and I urge everyone to explore it.

Regards,

Julio