Stripe in Brazil is obliged to register customer transactions for each merchant with the central bank as an aggregated unit per day. These are called receivables. A receivable is identified by 3 identifiers:
merchant_id(String): The id of the merchant on Stripe side.card_type(String): The type of the card used for the transaction (e.g. Visa)payout_date(String): String date of the funds available to the merchant by Stripe.
A payment transaction in Stripe API can be represented as the following object:
Transaction {
string customer_id
string merchant_id
string payout_date
string card_type
int amount
}
Implement register_receivables function that takes a string in CSV format where each line represents a transaction and returns the registered aggregated receivables using the rules above.
Print the returned receivables to console using the format below. Feel free to parse the CSV using a standard or a 3rd party library or implement it yourself.
You can assume the following about the input:
- The first line of the input is a header. The header is always the same so it can be ignored or hardcoded.
- You can assume that the input has already been read from a file and checked for correctness.
- No data fields in this file will include commas or whitespace surrounding the field values.
You can also assume the following about the output:
- The first line of the output is the header. The header is always the same so it can be hardcoded.
- Order of the output does not matter.
Example input 1:
customer_id,merchant_id,payout_date,card_type,amount
cust1,merchantA,2021-12-30,Visa,150
cust2,merchantA,2021-12-30,Visa,200
cust3,merchantB,2021-12-31,MasterCard,300
cust4,merchantA,2021-12-30,Visa,50
Output 1:
id,card_type,payout_date,amount
merchantA,Visa,2021-12-30,400
merchantB,MasterCard,2021-12-31,300
Example input 2:
customer_id,merchant_id,payout_date,card_type,amount
cust1,merchantA,2021-12-29,MasterCard,50
cust2,merchantA,2021-12-29,Visa,150
cust3,merchantB,2021-12-31,Visa,300
cust4,merchantB,2021-12-29,MasterCard,200
Output 2:
id,card_type,payout_date,amount
merchantA,MasterCard,2021-12-29,50
merchantA,Visa,2021-12-29,150
merchantB,Visa,2021-12-31,300
merchantB,MasterCard,2021-12-29,200
In addition, it’s possible for merchants to sell part of their receivables and/or receive multiple contracts for a receivable. Update the registered_receivables function implemented in part 2 to respect the rules mentioned above:
- The amount in the contracts won’t be more than it’s registered on the receivable.
- If a receivable is sold fully to one or more contracts, it should be returned as part of the registered receivables with 0 amounts.
- Contracts won’t have amounts equal to 0.
This Stripe OA problem asks you to aggregate transactions into receivables by the composite key <code>merchant_id</code>, <code>card_type</code>, and <code>payout_date</code>, then print the summed amounts in CSV form. In the extended version, contracts may partially or fully sell a receivable, so the algorithm must maintain the remaining balance per receivable and keep zero-amount entries when a receivable is fully sold. A hash map keyed by the three identifiers is the natural data structure for both aggregation and updates.