Skip to content

Instantly share code, notes, and snippets.

@vutlhari
Created July 24, 2022 20:34
Show Gist options
  • Save vutlhari/fbb2b22d3b53464b47c96b3f04e6a863 to your computer and use it in GitHub Desktop.
Save vutlhari/fbb2b22d3b53464b47c96b3f04e6a863 to your computer and use it in GitHub Desktop.
name: Rule Based Categorizer
description: ''
host: EXCEL
api_set: {}
script:
content: |
let categories = {
"BANK_FEES_OTHER.BANK_FEES": ["SEND CASH FEE", "MONTHLY SERVICE CHARGE", "FASTER PAYMENT FEE"],
"ENTERTAINMENT.MUSIC_AND_AUDIO": ["PAUL BOTHNER", "SPOTIFY"],
"ENTERTAINMENT.TV_AND_MOVIES": ["M-CHOICE", "WWW.F1.COM", "NETFLIX", "DISNEY PLUS"],
"ENTERTAINMENT.VIDEO_GAMES": ["PLAYSTATIONNETWORK"],
"FOOD_AND_DRINK.COFFEE": ["BOOTLEGGERS"],
"FOOD_AND_DRINK.FAST_FOOD": ["KFC", "PIZZA HUT", "DEBONAIRS", "STEERS", "CHICKEN LICKE", "CINNABON", "UNCLE FAOUZI"],
"FOOD_AND_DRINK.GROCERIES": ["PNP", "SPAR", "CHECKERS"],
"FOOD_AND_DRINK.RESTAURANT": ["SPUR", "PANAROTTIS", "PARROTS"],
"GENERAL_MERCHANDISE.CLOTHING_AND_ACCESSORIES": ["TRUWORTHS", "PEP", "H&M", "ACKERMANS", "THE FIX", "NIKE"],
"GENERAL_MERCHANDISE.DEPARTMENT_STORES": ["WOOLWORTHS"],
"GENERAL_MERCHANDISE.ELECTRONICS": ["COMPUTER MANIA"],
"GENERAL_MERCHANDISE.SUPERSTORES": ["MAKRO", "GAME"],
"GENERAL_MERCHANDISE.TOBACCO_AND_VAPE": ["YE OLDE TABACCO HOUSE"],
"GENERAL_SERVICES.INSURANCE": ["OUTSURANCE", "TRACKER"],
"GENERAL_SERVICES.OTHER_GENERAL_SERVICES": ["GITHUB", "APPLE.COM/BILL", "GOOGLE", "OMNISOL INFORMATION TEC"],
"GENERAL_SERVICES.POSTAGE_AND_SHIPPING": ["POSTNET"],
"HOME_IMPROVEMENT.HARDWARE": ["LEROY MERLIN"],
"INCOME.INTEREST_EARNED": ["CREDIT INTEREST"],
"INCOME.OTHER_INCOME": ["POINTS-TO-CASH"],
"INCOME.WAGES": ["SALARY"],
"LOAN_PAYMENTS.MORTGAGE_PAYMENT": ["NEDBHL", "SBSA HOMEL"],
"MEDICAL.PHARMACIES_AND_SUPPLEMENTS": ["DIS-CHEM", "CLICKS"],
"PERSONAL_CARE.GYMS_AND_FITNESS_CENTERS": ["VIRGIN ACT"],
"RENT_AND_UTILITIES.GAS_AND_ELECTRICITY": ["ELECTRICITY"],
"RENT_AND_UTILITIES.INTERNET_AND_CABLE": ["ISP"],
"RENT_AND_UTILITIES.SEWAGE_AND_WASTE_MANAGEMENT": ["PRETORGRP"],
TRANSFER_OUT_INVESTMENT_AND_RETIREMENT_FUNDS: ["EASY EQUITIES"],
"TRANSPORTATION.OTHER_TRANSPORTATION": ["MOWASH"],
"TRANSPORTATION.TAXIS_AND_RIDE_SHARES": ["UBER"],
"TRANSPORTATION.GAS": ["ENGEN", "TOTAL", "SHELL"],
Hobbies: ["CRAZY STORE"]
};
let lookup = {
BANK_FEES: "Bank fees",
ENTERTAINMENT: "Entertainment",
FOOD_AND_DRINK: "Food & drink",
GENERAL_MERCHANDISE: "General merchandise",
GENERAL_SERVICES: "General services",
GOVERNMENT_AND_NON_PROFIT: "Government & non-profit",
HOME_IMPROVEMENT: "Home improvement",
INCOME: "Income",
LOAN_PAYMENTS: "Loan payments",
MEDICAL: "Medical",
PERSONAL_CARE: "Personal care",
RENT_AND_UTILITIES: "Rent & utilities",
TRANSFER_IN: "Transfer in",
TRANSFER_OUT: "Transfer out",
TRANSPORTATION: "Transportation",
TRAVEL: "Travel"
};
function contains(input, ...args) {
for (let i = 0; i < args.length; i++) {
if (input.indexOf(args[i]) > -1) {
return true;
}
}
return false;
}
/**
* Returns the a category.
* @customfunction
* @param {string} input
*/
function getCategories(input) {
for (let key in categories) {
if (contains(input, ...categories[key])) {
const val = key.split(".")[0];
return lookup[val] || "Uncategorized";
}
}
return "Uncategorized";
}
language: typescript
libraries: |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js
@types/office-js
office-ui-fabric-js@1.4.0/dist/css/fabric.min.css
office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css
core-js@2.4.1/client/core.min.js
@types/core-js
jquery@3.1.1
@types/jquery@3.3.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment