Search This Blog

Showing posts with label Utility. Show all posts
Showing posts with label Utility. Show all posts

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.

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



Wednesday, December 26, 2018

The Oracle EBS Invalid Object Utility


If you are familiar with Oracle databases then you are familiar with invalid objects. Specially in the realm of EBS, where making a code change to a package, changing a table or applying a patch can cause many objects to become invalid within the various schemas in your database. There are of course tables you can query to see which objects are invalid, like dba_objects, where you can see whether a particular object is in an invalid state. However, the reason as to why that is, is not as easy to discern.

Here is where the EBS Invalid Object Utility (Doc ID 2214169.1) comes in. According to Oracle, "this utility is provided by Oracle Support to proactively assist you with maintaining Oracle Application environments and can also be used for data collection by Support engineers".

So, what does it do? It generates an HTML output with good details around invalid objects in the target instance and insights as to why they are invalid. If you have ongoing research efforts to reduce the invalid objects within your EBS Oracle database then this is a must, also it is a great a tool going forward whenever you need to research any invalid objects. A good use case would be to run the utility after releases or maintenance activities where patches are applied in order to get information regarding any objects that may have become invalid and why that happened.

Unlike your basic SQL against the tables provided by Oracle, the UI within the report looks great, and aside from aiding the research of invalid objects it has a couple of additional features. First is the "droppable" objects feature, which lists obsolete objects that can be dropped, since many objects don’t get dropped automatically after patches or upgrades, even if they get deprecated, thus creating noise within your instance and making subsequent upgrades harder and true invalid objects difficult to mine. The second additional feature is the patches applied feature, this one is really useful since it helps show which patch caused which object to become invalid, which really narrows down the root cause analysis as to why an object became invalid after a patch was applied.

There is no configuration required, all that is required is for the utility to be unzipped and executed. There are some basic requirements such as having Perl installed and the APPS environment set, all of which can be seen in the note I included above.

Oracle has a dedicated thread to share feedback regarding the utility and ask any questions, the thread can be found at: https://community.oracle.com/docs/DOC-1011252

Happy invalid objects hunting!