-
Notifications
You must be signed in to change notification settings - Fork 38
Respond to IRS letter #1164
Comments
They are looking at Braintree's 1099-K for us which shows $36,428 income and we reported $18,758. In other words, they are counting our escrow as income to Gratipay. The reason we didn't file our own 1099-Ks for our own receivers is the "Exception for de minimis payments":
We won't have anyone over the $20,000 limit for 2015, but now that I think of it we may have people that exceed the 200 limit, since we are dealing in micro-payments. |
We only bill people once a week, no? i.e. maximum of 52 transactions per payee, per year. |
@rohitpaulk But if someone has 10 givers that could be 520 transactions for the year. Also interacts with $10 minimum charge-in. Bottom line: we need to run the numbers. We've got about two weeks to get a response in the (registered) mail to meet the October 5 deadline. |
Just wrapped a conversation with a CPA, who serendipitously happened to be here at Paramount. I explained Gratipay to him, our status as a payment processor, etc. He reviewed the IRS letter, and he is going to put together an engagement letter to help us sort this out for an amount not to exceed $500. He doesn't think it'll escalate beyond that but of course who knows? :) He has experience with IRS audits (I guess technically this isn't an audit yet), and knows how to navigate the system (e.g., call the local office vs. responding by mail). Engagement letter coming next week. He took the IRS letter with him. We also need to provide:
We don't need to worry about the number of transactions in 2015 at this point. |
Emailed the CPA to establish contact. Started working up a query but it will take some thinking. |
Need to account for
|
Sent the tax return. Need numbers ... |
Can I repro the 18,758 number, first of all? |
Phew. :)
select
(select sum(amount) from payments where direction='to-team' and team='Gratipay'
and "timestamp"::text < '2016-01-01' and "timestamp"::text >= '2015-01-01')
+
(select sum(amount) from transfers where tippee='Gratipay'
and "timestamp"::text < '2016-01-01' and "timestamp"::text >= '2015-01-01'); |
🤔
select
(select sum(amount) from payments where direction='to-team'
and "timestamp"::text < '2016-01-01' and "timestamp"::text >= '2015-01-01')
+
(select sum(amount) from transfers where
"timestamp"::text < '2016-01-01' and "timestamp"::text >= '2015-01-01')
as "total volume"; |
That's way more than the 36,428 that Braintree reported. I guess the rest was Balanced? Did they not report 1099-Ks for 2015 since they went out of business? Seems likely ... |
Alright, can we repro the 36,428 figure coming in from Braintree? |
Um ... when did we start charging on Braintree? |
Alright, so our first Braintree charges were on 2015-05-29. |
(We have charges against |
Hmm ... low by $7,203 relative to Braintree's 1099-K? What am I missing? 🤔
select sum(amount + fee)
from exchanges e
join exchange_routes er
on e.route = er.id
where "timestamp"::text < '2016-01-01' and "timestamp"::text >= '2015-05-29'
and network = 'braintree-cc'
; |
What does the Braintree dashboard report? |
$27,671.68 if I constrain to |
2,266 rows. Braintree reports 2,516 successful transactions for the time period 2015-01-01 through 2015-12-31 inclusive. |
They begin on 2015-05-29 as expected. |
Oh! My query includes some refunds ... |
(https://gratipay.news/charging-in-arrears-18cacf779bee per note field.) |
Good lord we stopped keeping |
Looking at amount > 0 gets me to $30,232.90, but then only 1,687 transactions. |
Alright, filtering out refunds at Braintree drops it to 2,246. Do those sum to $36,428?
|
Let's call the rest of the receipts/pre |
💃
|
Now for disbursements ... |
Easy one there is PayPal, since we have a note. |
Looking at those with other notes, I find 779 and 754 are related to gratipay/gratipay.com#3378, which are refunds via either |
Disbursements don't really fall out on pre/post quite so much, 2015-10-10 is the more important date: gratipay/gratipay.com#3810.
|
Went through these:
|
👍
|
We'll wanna be careful how we handle fees for refunds (= disbursements via |
Picked off one more by looking at:
There are two left that are PayPal sanity check:
|
There's a couple goofball records with null note but a weird network. Forcing to
|
Alright, I'm ready to fold the remaining |
Okay, here are the escrow and income statements: financials.pdf. Now for the balance sheet ... |
I manually copied and pasted numbers from there into a Google Sheet for math and then from there to a Google Doc for formatting. |
We have statements for PNC and PayPal: https://github.com/gratipay/logs/blob/master/statements/2015/12/ We don't have a good statement for New Alliance nor a balance in the CSV. The last paper statement I have is from July, 2014, so I guess we start with that balance and then run through the transactions in CSV. |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
import os
import csv
from decimal import Decimal as D
balance = D('58813.78')
for year in ('2014', '2015'):
for month in os.listdir(year):
if not month.isdigit():
continue
if (year, month) < ('2014', '08'):
continue
path = os.sep.join([year, month])
for filename in os.listdir(path):
filepath = os.sep.join([path, filename])
if filename != 'new-alliance.csv':
continue
rows = csv.reader(open(filepath))
headers = next(rows)
for row in rows:
rec = dict(zip(headers, row))
balance += D(rec['Amount'])
print(balance) |
Alright, let's see about escrow liability! |
Okay, I have a query adapted from
|
Actually the transfers and payment cancel out, for this we only need to look at exchanges. |
Okay, looks like escrow liability is 115,841.28 at the end of 2015-12-31. I'm only showing 92,232 in escrow assets so where was the rest? |
23,609.28 |
"Other" :D |
Alright so for equity ... it's Assets - Liability ... done! Okay! Time to print ... |
Okay WOW!!!!!!!!!!!!!!!!!!! O.o 😳 🐭 😩 💃 |
@JessWhit and I and the accountant met with a lady at this tiny IRS office, the most hidden away unbranded government office you could imagine, a parody of itself. The agent was helpful though more as an ombudsman ("That's not my unit but ..."). Here's the IRS's documentation for the AUR process we're going through. We got a CP2000. At the end she was like, "You have an interesting business. I learned something today." 😅 Bottom line is we need to file an amended return for 2015 and when that clears we'll refile 2016, too. We need to show gross receipts of everything we charge (on Braintree, etc.) and then list an "Other" expense for escrow including payouts (we'd report with 1099-K if ever over $20,000 per recipient). We have a couple weeks before the IRS sends a second notice asking if we agree to their change, and another 30 days after that before they actually assess the tax. @JessWhit is going to look at what we can do with H&R Block's app (which is what we used for 2015), and then we'll coordinate with the accountant to fax our response to the IRS, to include:
She advised that if we can get it done in a week or two that we should just contact them once with our full response, rather than trying to call them and let them know a response is on its way. Two weeks is like the blink of an eye for the IRS. If our fax gets lost in the ... fax? ... we'll get the second notice from them in a month. At that point we can call and say "Hey you turkeys!" We'll have our own record of having faxed them, and the agent today did leave a note on our file that we met with her ("They don't always read my notes. In fact, they usually don't." "I would read your notes, []." :D). |
And now we have not-too-bad financials for 2015! Bonus! :D |
I met with the CPA and we came up with a way to fit our numbers into a Schedule C by using "Other Income" for our escrow liability (a negative value). @JessWhit went through and redid our Schedule C and 1040 based on these new numbers and also filled out a 1040X. I'm reviewing them now. There is a $40 discrepancy that we need to fix up, it snuck in because I was used both 3115 and 3155 for the refunds amount. The former is correct:
|
First time for everything, friends. :)
The text was updated successfully, but these errors were encountered: