From 4c41346b1f28a19878d42901824372d0dd0cf93f Mon Sep 17 00:00:00 2001 From: "Daniel Gale-Rosen (via MelvinBot)" Date: Thu, 9 Apr 2026 19:15:51 +0000 Subject: [PATCH 1/2] Add gift card purchases as a new prohibited expense type Co-authored-by: Daniel Gale-Rosen --- src/CONST/index.ts | 1 + src/languages/de.ts | 3 +++ src/languages/en.ts | 3 +++ src/languages/es.ts | 3 +++ src/languages/fr.ts | 3 +++ src/languages/it.ts | 5 ++++- src/languages/ja.ts | 3 +++ src/languages/nl.ts | 3 +++ src/languages/pl.ts | 3 +++ src/languages/pt-BR.ts | 3 +++ src/languages/zh-hans.ts | 3 +++ src/types/onyx/Policy.ts | 3 +++ 12 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 3d66a4d43fac3..ee522cf6717fd 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -3671,6 +3671,7 @@ const CONST = { GAMBLING: 'gambling', TOBACCO: 'tobacco', ADULT_ENTERTAINMENT: 'adultEntertainment', + GIFT_CARD: 'giftCard', }, RECEIPT_PARTNERS: { NAME: {UBER: 'uber'}, diff --git a/src/languages/de.ts b/src/languages/de.ts index 963c61ac7a7c4..0dd443ba6522f 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6706,6 +6706,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und gambling: 'Glücksspiel', tobacco: 'Tabak', adultEntertainment: 'Erwachsenenunterhaltung', + giftCard: 'Geschenkkartenkäufe', requireCompanyCard: 'Firmenkarten für alle Käufe vorschreiben', requireCompanyCardDescription: 'Kennzeichne alle Barausgaben, einschließlich Kilometer- und Tagegeldspesen.', requireCompanyCardDisabledTooltip: 'Aktiviere Firmenkarten (unter Weitere Funktionen), um dies freizuschalten.', @@ -8249,6 +8250,8 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc return `Erwachsenenunterhaltung`; case 'hotelIncidentals': return `Nebenkosten im Hotel`; + case 'giftCard': + return `Geschenkkartenkäufe`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/en.ts b/src/languages/en.ts index e4c5028b62357..7db0b33bee630 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6674,6 +6674,7 @@ const translations = { gambling: 'Gambling', tobacco: 'Tobacco', adultEntertainment: 'Adult entertainment', + giftCard: 'Gift card purchases', requireCompanyCard: 'Require company cards for all purchases', requireCompanyCardDescription: 'Flag all cash spend, including mileage and per-diem expenses.', requireCompanyCardDisabledTooltip: 'Enable Company cards (under More features) to unlock.', @@ -8215,6 +8216,8 @@ const translations = { return `adult entertainment`; case 'hotelIncidentals': return `hotel incidentals`; + case 'giftCard': + return `gift card purchases`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/es.ts b/src/languages/es.ts index 1e9a38ec17bfb..4b35fc55d9743 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6548,6 +6548,7 @@ ${amount} para ${merchant} - ${date}`, gambling: 'Juegos de apuestas', tobacco: 'Tabaco', adultEntertainment: 'Entretenimiento para adultos', + giftCard: 'Compras de tarjetas regalo', requireCompanyCard: 'Requerir que todas las compras se hagan con la tarjeta de empresa', requireCompanyCardDescription: 'Marca todo gasto en efectivo, incluyendo kilometraje y gastos per diem.', requireCompanyCardDisabledTooltip: 'Habilita las tarjetas de empresa (bajo Más características) para desbloquearlo.', @@ -8451,6 +8452,8 @@ ${amount} para ${merchant} - ${date}`, return `entretenimiento para adultos`; case 'hotelIncidentals': return `gastos adicionales de hotel`; + case 'giftCard': + return `compras de tarjetas regalo`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 82f6c79bcdb62..8489db6862fd9 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6728,6 +6728,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip gambling: 'Jeux d’argent', tobacco: 'Tabac', adultEntertainment: 'Divertissement pour adultes', + giftCard: 'Achats de cartes-cadeaux', requireCompanyCard: "Exiger l'utilisation de cartes d'entreprise pour tous les achats", requireCompanyCardDescription: 'Signaler toutes les dépenses en espèces, y compris le kilométrage et les indemnités journalières.', requireCompanyCardDisabledTooltip: 'Activez les cartes d’entreprise (dans Plus de fonctionnalités) pour déverrouiller.', @@ -8273,6 +8274,8 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e return `divertissement pour adultes`; case 'hotelIncidentals': return `Frais annexes d'hôtel`; + case 'giftCard': + return `achats de cartes-cadeaux`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/it.ts b/src/languages/it.ts index 4a3ad959ec29d..2f9c1ebce4a69 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6691,6 +6691,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo gambling: 'Gioco d’azzardo', tobacco: 'Tabacco', adultEntertainment: 'Intrattenimento per adulti', + giftCard: 'Acquisto di carte regalo', requireCompanyCard: 'Richiedi le carte aziendali per tutti gli acquisti', requireCompanyCardDescription: 'Contrassegna tutte le spese in contanti, inclusi chilometraggio e indennità giornaliere.', requireCompanyCardDisabledTooltip: 'Abilita Carte aziendali (in Altre funzionalità) per sbloccare.', @@ -8237,8 +8238,10 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, return `tabacco`; case 'adultEntertainment': return `intrattenimento per adulti`; - case 'hotelIncidentals': + case ‘hotelIncidentals’: return `spese accessorie dell’hotel`; + case ‘giftCard’: + return `acquisto di carte regalo`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/ja.ts b/src/languages/ja.ts index b7460368b0e3b..0b322ee4ab73c 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6619,6 +6619,7 @@ ${reportName} gambling: 'ギャンブル', tobacco: 'たばこ', adultEntertainment: 'アダルトエンターテインメント', + giftCard: 'ギフトカード購入', requireCompanyCard: 'すべての購入に会社カードを必須にする', requireCompanyCardDescription: 'マイレージや日当経費を含む、すべての現金支出にフラグを付ける。', requireCompanyCardDisabledTooltip: 'ロック解除するには、「その他の機能」内の「会社カード」を有効にしてください。', @@ -8136,6 +8137,8 @@ ${reportName} return `アダルトエンターテインメント`; case 'hotelIncidentals': return `ホテル諸雑費`; + case 'giftCard': + return `ギフトカード購入`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 82eec026635c2..3faae9e55b005 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6673,6 +6673,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar gambling: 'Gokken', tobacco: 'Tabak', adultEntertainment: 'Volwassenenentertainment', + giftCard: 'Cadeaukaartaankopen', requireCompanyCard: 'Verplicht bedrijfskaarten voor alle aankopen', requireCompanyCardDescription: 'Markeer alle contante uitgaven, inclusief kilometer- en dagvergoedingen.', requireCompanyCardDisabledTooltip: 'Schakel Bedrijfskaarten in (onder Meer functies) om te ontgrendelen.', @@ -8215,6 +8216,8 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, return `entertainment voor volwassenen`; case 'hotelIncidentals': return `hotelincidentals`; + case 'giftCard': + return `cadeaukaartaankopen`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/pl.ts b/src/languages/pl.ts index fad2436ea5bc9..2c048dccc37e2 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6664,6 +6664,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i gambling: 'Hazard', tobacco: 'Tytoń', adultEntertainment: 'Rozrywka dla dorosłych', + giftCard: 'Zakup kart podarunkowych', requireCompanyCard: 'Wymagaj kart służbowych dla wszystkich zakupów', requireCompanyCardDescription: 'Oznacz wszystkie wydatki gotówkowe, w tym koszty za przejechane kilometry i ryczałty dzienne.', requireCompanyCardDisabledTooltip: 'Włącz karty firmowe (w sekcji Więcej funkcji), aby odblokować.', @@ -8200,6 +8201,8 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, return `rozrywka dla dorosłych`; case 'hotelIncidentals': return `dodatkowe opłaty hotelowe`; + case 'giftCard': + return `zakup kart podarunkowych`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index b50ded52c6e85..777c6a7fbb7fe 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6671,6 +6671,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e gambling: 'Jogos de azar', tobacco: 'Tabaco', adultEntertainment: 'Entretenimento adulto', + giftCard: 'Compras de cartão-presente', requireCompanyCard: 'Exigir cartões corporativos para todas as compras', requireCompanyCardDescription: 'Sinalize todos os gastos em dinheiro, incluindo despesas com quilometragem e diárias.', requireCompanyCardDisabledTooltip: 'Ative Cartões corporativos (em Mais recursos) para desbloquear.', @@ -8208,6 +8209,8 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, return `entretenimento adulto`; case 'hotelIncidentals': return `despesas incidentais de hotel`; + case 'giftCard': + return `compras de cartão-presente`; default: return `${prohibitedExpenseType}`; } diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index acf4ea70a06fc..88164eba4e4ba 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -6495,6 +6495,7 @@ ${reportName} gambling: '赌博', tobacco: '烟草', adultEntertainment: '成人娱乐', + giftCard: '礼品卡购买', requireCompanyCard: '所有消费均需使用公司卡', requireCompanyCardDescription: '标记所有现金支出,包括里程和每日津贴报销。', requireCompanyCardDisabledTooltip: '启用“公司卡”(位于“更多功能”下)以解锁。', @@ -7982,6 +7983,8 @@ ${reportName} return `成人娱乐`; case 'hotelIncidentals': return `酒店杂费`; + case 'giftCard': + return `礼品卡购买`; default: return `${prohibitedExpenseType}`; } diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index 38a6c21e1c895..b2b1d9ab239f5 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -1545,6 +1545,9 @@ type ProhibitedExpenses = OnyxCommon.OnyxValueWithOfflineFeedback<{ /** Whether the policy prohibits adult entertainment expenses */ adultEntertainment?: boolean; + + /** Whether the policy prohibits gift card purchases */ + giftCard?: boolean; }>; /** Day of the month to schedule submission */ From f02cee3fb49b7afaee907cfde9cfb1fd2782219c Mon Sep 17 00:00:00 2001 From: "Daniel Gale-Rosen (via MelvinBot)" Date: Thu, 9 Apr 2026 19:32:55 +0000 Subject: [PATCH 2/2] Fix: replace smart quotes with straight quotes in Italian translations The original commit introduced Unicode smart quotes (U+2018/U+2019) in case statement string delimiters in it.ts, which are not valid JavaScript syntax. This caused Prettier and TypeScript check failures. Co-authored-by: Daniel Gale-Rosen --- src/languages/it.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/it.ts b/src/languages/it.ts index 2f9c1ebce4a69..c573e66f77ebd 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -8238,9 +8238,9 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, return `tabacco`; case 'adultEntertainment': return `intrattenimento per adulti`; - case ‘hotelIncidentals’: + case 'hotelIncidentals': return `spese accessorie dell’hotel`; - case ‘giftCard’: + case 'giftCard': return `acquisto di carte regalo`; default: return `${prohibitedExpenseType}`;