mirror of
https://github.com/spliit-app/spliit.git
synced 2026-02-21 23:16:13 +01:00
Fix amount preview for scanned receipts (#227)
* no division of amount * use gpt-4-turbo * testing setup and naive test * test multiple variants * document * correct locale names * test large amounts * test wth strings * prettier
This commit is contained in:
@@ -12,7 +12,7 @@ export async function extractExpenseInformationFromImage(imageUrl: string) {
|
||||
const categories = await getCategories()
|
||||
|
||||
const body: ChatCompletionCreateParamsNonStreaming = {
|
||||
model: 'gpt-4-vision-preview',
|
||||
model: 'gpt-4-turbo',
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
|
||||
66
src/lib/utils.test.ts
Normal file
66
src/lib/utils.test.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { formatCurrency } from './utils'
|
||||
|
||||
describe('formatCurrency', () => {
|
||||
const currency = 'CUR'
|
||||
/** For testing decimals */
|
||||
const partialAmount = 1.23
|
||||
/** For testing small full amounts */
|
||||
const smallAmount = 1
|
||||
/** For testing large full amounts */
|
||||
const largeAmount = 10000
|
||||
|
||||
/** Non-breaking space */
|
||||
const nbsp = '\xa0'
|
||||
|
||||
interface variation {
|
||||
amount: number
|
||||
locale: string
|
||||
result: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Variations to be tested, chosen as follows
|
||||
* - `en-US` is a very common i18n fallback
|
||||
* - `de-DE` exhibited faulty behavior in previous versions
|
||||
*/
|
||||
const variations: variation[] = [
|
||||
{
|
||||
amount: partialAmount,
|
||||
locale: `en-US`,
|
||||
result: `${currency}1.23`,
|
||||
},
|
||||
{
|
||||
amount: smallAmount,
|
||||
locale: `en-US`,
|
||||
result: `${currency}1.00`,
|
||||
},
|
||||
{
|
||||
amount: largeAmount,
|
||||
locale: `en-US`,
|
||||
result: `${currency}10,000.00`,
|
||||
},
|
||||
{
|
||||
amount: partialAmount,
|
||||
locale: `de-DE`,
|
||||
result: `1,23${nbsp}${currency}`,
|
||||
},
|
||||
{
|
||||
amount: smallAmount,
|
||||
locale: `de-DE`,
|
||||
result: `1,00${nbsp}${currency}`,
|
||||
},
|
||||
{
|
||||
amount: largeAmount,
|
||||
locale: `de-DE`,
|
||||
result: `10.000,00${nbsp}${currency}`,
|
||||
},
|
||||
]
|
||||
|
||||
for (const variation of variations) {
|
||||
it(`formats ${variation.amount} in ${variation.locale}`, () => {
|
||||
expect(formatCurrency(currency, variation.amount, variation.locale)).toBe(
|
||||
variation.result,
|
||||
)
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -40,7 +40,7 @@ export function formatCurrency(
|
||||
// '€' will be placed in correct position
|
||||
currency: 'EUR',
|
||||
})
|
||||
const formattedAmount = format.format(amount / 100)
|
||||
const formattedAmount = format.format(amount)
|
||||
return formattedAmount.replace('€', currency)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user