<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Huy Pham</title>
    <description>The latest articles on DEV Community by Huy Pham (@quochuy130725).</description>
    <link>https://dev.to/quochuy130725</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3965055%2Fc5abc746-22b6-45e2-8c4b-a9fe54b7348e.png</url>
      <title>DEV Community: Huy Pham</title>
      <link>https://dev.to/quochuy130725</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quochuy130725"/>
    <language>en</language>
    <item>
      <title>RPA Expense Approver — From Manual Checking to Automated Approval</title>
      <dc:creator>Huy Pham</dc:creator>
      <pubDate>Sun, 07 Jun 2026 16:48:50 +0000</pubDate>
      <link>https://dev.to/quochuy130725/rpa-expense-approver-from-manual-checking-to-automated-approval-66f</link>
      <guid>https://dev.to/quochuy130725/rpa-expense-approver-from-manual-checking-to-automated-approval-66f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;RPA Expense Approver&lt;/strong&gt;, an automation project that helps process expense requests from a user-facing app.&lt;/p&gt;

&lt;p&gt;The main idea is simple: instead of checking expense requests manually, the system allows users to submit a request through an app. The submitted data is stored in Google Sheets, then UiPath Orchestrator triggers an Unattended Robot to process the request automatically.&lt;/p&gt;

&lt;p&gt;The robot checks the amount, updates the request status, and sends an email notification to the user.&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React / Expo for the request form UI&lt;/li&gt;
&lt;li&gt;Google Sheets as the request data source&lt;/li&gt;
&lt;li&gt;UiPath Studio for the automation workflow&lt;/li&gt;
&lt;li&gt;UiPath Orchestrator for process management and triggers&lt;/li&gt;
&lt;li&gt;UiPath Unattended Robot for automatic execution&lt;/li&gt;
&lt;li&gt;Gmail for sending approval or rejection emails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The automation flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User submits request from app
→ Data is saved to Google Sheets
→ Request status is set to Pending
→ UiPath Orchestrator starts the robot
→ Robot checks the expense amount
→ Status is updated to Approved or Rejected
→ Email notification is sent to the user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This project means a lot to me because it helped me understand how frontend development and RPA automation can work together in a real-world workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/quochuy130725/ExpenseRpaApp" rel="noopener noreferrer"&gt;https://github.com/quochuy130725/ExpenseRpaApp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo Video: &lt;a href="https://youtu.be/uE9z-dd6LQY" rel="noopener noreferrer"&gt;https://youtu.be/uE9z-dd6LQY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Screenshots included in the demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expense request form on the app&lt;/li&gt;
&lt;li&gt;Google Sheets receiving a new request&lt;/li&gt;
&lt;li&gt;UiPath Orchestrator job running successfully&lt;/li&gt;
&lt;li&gt;Gmail receiving the approval email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the demo, a user submits an expense request from the app. The data appears in Google Sheets with the status &lt;code&gt;Pending&lt;/code&gt;. After that, UiPath Orchestrator runs the &lt;code&gt;ExpenseApprover_Process&lt;/code&gt; using an Unattended Robot. The robot checks the request and sends an approval email automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;Before finishing this project, the workflow was mostly manual. I already had the basic idea and some individual parts working, but they were not fully connected.&lt;/p&gt;

&lt;p&gt;At first, the app could send data to Google Sheets, and the UiPath workflow could process the sheet manually from UiPath Studio. However, it was not a complete automation yet because I still had to start the robot myself.&lt;/p&gt;

&lt;p&gt;During the finish-up process, I improved the project by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting UiPath Assistant to Orchestrator as an Unattended Robot&lt;/li&gt;
&lt;li&gt;Publishing the UiPath project to Orchestrator&lt;/li&gt;
&lt;li&gt;Creating the &lt;code&gt;ExpenseApprover_Process&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configuring the machine, user, and folder permissions&lt;/li&gt;
&lt;li&gt;Testing the process from Orchestrator Jobs&lt;/li&gt;
&lt;li&gt;Setting up the trigger so the robot can run automatically&lt;/li&gt;
&lt;li&gt;Sending approval emails after processing&lt;/li&gt;
&lt;li&gt;Improving the data flow from app submission to Google Sheets and email notification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hardest part was configuring UiPath Orchestrator correctly. I had to set up the machine, unattended robot, folder access, process, and trigger. After several failed attempts, I finally got the job to run successfully with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Type: RPA (Unattended)
State: Successful
Source: Trigger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was the moment the project became a real end-to-end automation system.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped me speed up the development process, especially when working on the form submission logic.&lt;/p&gt;

&lt;p&gt;I used Copilot to support tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building the request form structure&lt;/li&gt;
&lt;li&gt;Preparing the submit function&lt;/li&gt;
&lt;li&gt;Formatting the data before sending it to Google Sheets&lt;/li&gt;
&lt;li&gt;Adding basic validation for fields like amount, category, description, and email&lt;/li&gt;
&lt;li&gt;Improving small JavaScript and JSON logic&lt;/li&gt;
&lt;li&gt;Writing cleaner and more readable code comments&lt;/li&gt;
&lt;li&gt;Drafting parts of the README documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One useful part was the form submit logic. Copilot helped suggest how to structure the submitted data so that each request could be saved with fields like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ID
Amount
Category
Description
ImageBase64
Status
UserEmail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This made the data easier for the UiPath robot to read and process.&lt;/p&gt;

&lt;p&gt;Copilot did not replace my work, but it helped me move faster. I still had to understand the project flow, fix errors, connect the services, and test the automation manually. It was most helpful when I already knew what I wanted to build but needed support writing or improving the code faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;p&gt;By the end of the project, I successfully created an automated expense approval workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend App
→ Google Sheets
→ UiPath Orchestrator
→ Unattended Robot
→ Email Notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This project helped me learn more about automation, system integration, UiPath Orchestrator, and how RPA can solve real workflow problems.&lt;/p&gt;

&lt;p&gt;In the future, I want to improve this project by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding a backend API instead of writing directly to Google Sheets&lt;/li&gt;
&lt;li&gt;Using UiPath Queues for better scalability&lt;/li&gt;
&lt;li&gt;Adding authentication for users&lt;/li&gt;
&lt;li&gt;Creating a dashboard to track approval history&lt;/li&gt;
&lt;li&gt;Supporting more approval rules based on category and amount&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
