Skip to content

Commit 8ea3286

Browse files
committed
Fixes for calculations to help with PM-5507
1 parent 2ad00d2 commit 8ea3286

3 files changed

Lines changed: 85 additions & 0 deletions

File tree

src/api/repository/winnings.repo.spec.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ describe('WinningsRepository', () => {
2929
findManyMock = jest.fn().mockResolvedValue([]);
3030

3131
const prismaMock = {
32+
$queryRaw: jest.fn().mockResolvedValue([]),
3233
winnings: {
3334
findMany: findManyMock,
3435
},
@@ -162,4 +163,52 @@ describe('WinningsRepository', () => {
162163
});
163164
expect(findManyArgs.where.winner_id).toBeUndefined();
164165
});
166+
167+
it('returns persisted challenge fee and markup for external-id payment history', async () => {
168+
const createdAt = new Date('2026-06-15T13:28:18.662Z');
169+
170+
findManyMock.mockResolvedValueOnce([
171+
{
172+
attributes: {},
173+
category: 'ENGAGEMENT_PAYMENT',
174+
created_at: createdAt,
175+
description: 'Wipro - UHG - Power BI resources',
176+
external_id: 'assignment-1',
177+
origin: {
178+
origin_name: 'Topcoder',
179+
},
180+
payment: [
181+
{
182+
billing_account: '80004405',
183+
challenge_fee: 386.94,
184+
challenge_markup: 0.71,
185+
currency: 'USD',
186+
date_paid: createdAt,
187+
gross_amount: 544.99,
188+
installment_number: 1,
189+
net_amount: 0,
190+
payment_id: '8fbb836d-3d6b-4e19-a4cc-871e0e1bc12d',
191+
payment_status: 'PAID',
192+
release_date: createdAt,
193+
total_amount: 544.99,
194+
updated_at: createdAt,
195+
},
196+
],
197+
title: 'Wipro - UHG - Power BI resources',
198+
type: 'PAYMENT',
199+
updated_at: createdAt,
200+
winner_id: '500013447',
201+
winning_id: 'winning-1',
202+
},
203+
]);
204+
205+
const result = await winningsRepo.getWinningsByExternalId('assignment-1');
206+
207+
expect(result.data?.[0].details[0]).toMatchObject({
208+
billingAccount: '80004405',
209+
challengeFee: 386.94,
210+
challengeMarkup: 0.71,
211+
totalAmount: 544.99,
212+
});
213+
});
165214
});

src/api/repository/winnings.repo.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,16 @@ export class WinningsRepository {
406406
releaseDate: paymentItem.release_date as Date,
407407
category: item.category as string,
408408
billingAccount: paymentItem.billing_account,
409+
challengeFee:
410+
paymentItem.challenge_fee === null ||
411+
paymentItem.challenge_fee === undefined
412+
? undefined
413+
: Number(paymentItem.challenge_fee),
414+
challengeMarkup:
415+
paymentItem.challenge_markup === null ||
416+
paymentItem.challenge_markup === undefined
417+
? undefined
418+
: Number(paymentItem.challenge_markup),
409419
})),
410420
createdAt: item.created_at as Date,
411421
updatedAt: (item.payment?.[0].date_paid ??
@@ -507,6 +517,16 @@ export class WinningsRepository {
507517
releaseDate: paymentItem.release_date as Date,
508518
category: item.category as string,
509519
billingAccount: paymentItem.billing_account,
520+
challengeFee:
521+
paymentItem.challenge_fee === null ||
522+
paymentItem.challenge_fee === undefined
523+
? undefined
524+
: Number(paymentItem.challenge_fee),
525+
challengeMarkup:
526+
paymentItem.challenge_markup === null ||
527+
paymentItem.challenge_markup === undefined
528+
? undefined
529+
: Number(paymentItem.challenge_markup),
510530
})),
511531
createdAt: item.created_at as Date,
512532
updatedAt: (item.payment?.[0].date_paid ??

src/dto/payment.dto.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ export class PaymentDetailDto {
3434
releaseDate: Date;
3535
category: string;
3636
billingAccount: string;
37+
38+
@ApiProperty({
39+
description:
40+
'Persisted billing-account challenge fee for this payment detail. Engagement payments use this value to reconcile finance payment splits with billing-account consumed rows.',
41+
example: 386.94,
42+
required: false,
43+
})
44+
challengeFee?: number;
45+
46+
@ApiProperty({
47+
description:
48+
'Persisted billing-account markup used when the challenge fee was calculated.',
49+
example: 0.71,
50+
required: false,
51+
})
52+
challengeMarkup?: number;
3753
}
3854

3955
export class PaymentCreateRequestDto {

0 commit comments

Comments
 (0)