function oxDone() { var gads = document.createElement('script'), useSSL = 'https:' === document.location.protocol, node = document.getElementsByTagName('script')[0]; gads.async = true; gads.type = 'text/javascript'; gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; node.parentNode.insertBefore(gads, node); } setTimeout(function() { if (!('OX' in window || 'oxhbjs' in window)) { oxDone(); } }, 2500); (function() { var openx = document.createElement('script'), useSSL = 'https:' === document.location.protocol, node = document.getElementsByTagName('script')[0]; openx.async = true; openx.type = 'text/javascript'; openx.src = (useSSL ? 'https:' : 'http:') + '//lovetk-d.openx.net/w/1.0/jstag?nc=1004147-LoveToKnow'; node.parentNode.insertBefore(openx, node); })(); ltk.ads = { retries: [], contentUnit: 'LTK_Business_Finance_Business_Content', debug: false, refreshInterval: 25000, excludedIds: ['ad-carambola-desktop', 'ad-carambola-mobile'], slots: [], numOxSlotsDefined: 0, define: function(id, unit, size, sizes, delay) { var help = this.helpers, debug = this.debug; var sizeDef = size; googletag.cmd.push(function() { if (sizeDef.length === 0) { sizeDef = help.getMaxSizeArr(sizes); } if (sizeDef.length) { if (debug) help.title('define'); var def = googletag.defineSlot('/1004147/' + unit, sizeDef, id) .addService(googletag.pubads()); if (ltk.ads.debug) help.logDeep('define unit: ' + unit + ' for ' + id); if (help.isOxAd(id)) { ltk.ads.numOxSlotsDefined++; if (ltk.ads.numOxSlotsDefined === OX_dfp_ads.length) { OX.dfp_bidder.setOxTargeting(); } if (debug) help.logDeep('set OX target: ' + sizeDef[0] + 'x' + sizeDef[1] + ' for ' + unit); } ltk.ads.slots.push({ id: id, ad: def, visible: false, firstRefresh: true, timer: { state: 'stopped', counter: (ltk.ads.refreshInterval / 1000), isStopped: function() { return this.state === 'stopped'; }, isPaused: function() { return this.state === 'paused'; }, isActive: function() { return this.state === 'active'; }, getState: function() { return this.state; }, pause: function() { this.state = 'paused'; if (debug) help.logTimerPaused('pause timer for ' + id + ': ' + help.getSlotById(id).timer.state); }, resume: function() { this.state = 'active'; if (this.counter <= 1) this.counter++; // make sure we have a minimum impression time of 1 sec if (debug) help.logTimerPaused('resume timer for ' + id + ': ' + help.getSlotById(id).timer.state); }, startTimer: function(slot) { this.state = 'active'; // set to a property in case we need to clear it slot.timer.interval = setInterval(function() { if (!slot.timer.isPaused() && !slot.timer.isStopped() && slot.visible) { if (debug) help.logTimer('refresh ' + id + ' in ' + slot.timer.counter + ' seconds'); slot.timer.counter--; } else { if (debug) help.logTimerPaused('remain paused for ' + id); } if (slot.timer.counter < 0) { ltk.ads.refresh(slot.id); slot.timer.counter = (ltk.ads.refreshInterval / 1000); } }, 1000); } } }); googletag.display(id); // needed only for wrangling sticky ads on load if (debug) help.logDeep('pre-render the ad so sticky ads actually stick'); if (!delay) { if (debug) help.logDeep('see no delay, so request initial fetch and display of the ad'); ltk.ads.refresh(id); } } }); }, refresh: function(id) { var help = this.helpers, debug = this.debug; if (debug) { help.title('refresh'); } googletag.cmd.push(function() { var ad_slot = help.getSlotById(id), ad = ad_slot.ad; if (!ad_slot.firstRefresh && help.isAdOldEnough(ad_slot) === false) { var age = (((new Date()) - ad_slot.timer.last) / 1000); if (debug) { console.log( '%cNot refreshing ... ' + ad_slot.id + ' is only ' + age + ' seconds old', 'background:red;color:white;' ); } return; } if (!ad_slot.firstRefresh && !ad_slot.visible) return; // we won't refresh unless we're visible to google if (help.isOxAd(ad_slot)) { if (debug) help.log('refresh the OX DFP ad for ' + id); OX.dfp_bidder.refresh(function() { OX.dfp_bidder.setOxTargeting([ad]); googletag.pubads().refresh([ad]); }); } else { if (debug) help.log('refresh the non-OX ad ' + id); googletag.pubads().refresh([ad]); } }); }, listen: function(name, handler) { googletag.cmd.push(function() { googletag.pubads().addEventListener(name, handler); }); }, handleImpressionViewable: function(event) { var help = ltk.ads.helpers, debug = ltk.ads.debug; var id = event.slot.getSlotElementId(), slot = help.getSlotById(id); if (debug) { help.title('impressionViewable'); help.logDeep('see event triggered for ' + id); } slot.visible = true; if (slot.timer.isStopped()) { if (debug) help.logDeep('am starting the timer'); slot.timer.startTimer(); return; } if (slot.timer.isPaused()) { if (debug) help.logDeep('am resuming the timer'); slot.timer.resume(); } }, handleSlotRenderEnded: function(event) { var help = ltk.ads.helpers, debug = ltk.ads.debug; if (debug) { help.title('slotRenderEnded'); help.logDeep('see event triggered for ' + event.slot.getSlotElementId()); } var slot = help.getSlotById(event.slot.getSlotElementId()); if (slot.firstRefresh === true) slot.firstRefresh = false; slot.timer.last = new Date(); if (slot.visible && slot.timer.isStopped()) { if (debug) help.logDeep('am starting the timer'); slot.timer.startTimer(); return; } if (slot.visible && slot.timer.isPaused()) { if (debug) help.logDeep('am resuming the timer'); slot.timer.resume(); } }, handleSlotVisibilityChanged: function(event) { var help = ltk.ads.helpers, debug = ltk.ads.debug; var id = event.slot.getSlotElementId(), perc = event.inViewPercentage, slot = help.getSlotById(id), wasVisible = slot.visible; if (!help.isValidAd(slot)) return; if (debug) { help.title('slotVisiblityChanged'); help.logDeep('see that slotVisibilityChanged was triggered for ' + id); } slot.visible = perc < 50 ? false : true; // same criteria as 'impressionViewable' event var changedOn = !wasVisible && slot.visible, changedOff = wasVisible && !slot.visible; if (debug) { help.logDeep('see that ad was ' + (wasVisible ? 'visible ' : 'not visible ') + 'and is now ' + (slot.visible ? 'visible' : 'not visible')); help.logDeep('see that ' + id + ' has timer as: ' + slot.timer.getState()); } if (changedOn && slot.timer.isStopped()) { if (debug) help.logDeep('am starting the timer'); slot.timer.startTimer(slot); return; } if (changedOn && slot.timer.isPaused()) { if (debug) help.logDeep('am resuming the timer'); slot.timer.resume(); return; } if (changedOff && slot.timer.isActive()) { if (debug) help.logDeep('am pausing the timer'); slot.timer.pause(); } }, helpers: { getMaxSizeArr: function(arr) { var len = arr.length, i = len - 1, retArr = []; for (; i >= 0; i--) { var minVpSize = arr[i][0], minVpWidth = minVpSize[0], minVpHeight = minVpSize[1], allowedAdSizes = arr[i][1]; if (window.innerWidth >= minVpWidth && window.innerHeight >= minVpHeight) { retArr = allowedAdSizes; break; } } return retArr; }, getSlotById: function(id) { for (var i = 0; i < ltk.ads.slots.length; i++) { if (ltk.ads.slots[i].id === id) return ltk.ads.slots[i]; } }, isOxAd: function(ad_slot) { for (var i = 0; i < OX_dfp_ads.length; i++) { if (OX_dfp_ads[i][2] === ad_slot.id) return true; } return false; }, isValidAd: function(ad_slot) { for (var i = 0; i < ltk.ads.excludedIds.length; i++) { if (ad_slot.id === ltk.ads.excludedIds[i]) return false; } return true; }, isAdOldEnough: function(ad_slot) { var timeSpan = Math.ceil(((new Date()) - ad_slot.timer.last) / 1000); var min = Math.ceil(ltk.ads.refreshInterval / 1000); if (timeSpan >= min) { if (ltk.ads.debug) { ltk.ads.helpers.log( 'see that ' + ad_slot.id + ' was refreshed ' + timeSpan + ' seconds ago' ); } return true; } return false; }, title: function(str) { console.log( '%c' + ltk.ads.helpers.getTime() + ' ' + str, 'background:black;color:white;font-weight:bold' ); }, titleDeep: function(str) { console.log( '%c' + ltk.ads.helpers.getTime() + ' ' + str, 'background:black;color:white;font-weight:bold' ); }, log: function(str) { console.log( '%c' + ltk.ads.helpers.getTime() + ' I: ' + '%c' + str, 'background:black;color:orchid;font-weight:bold', 'background:black;color:limegreen;font-weight:bold' ); }, logDeep: function(str) { console.log( '%c' + ltk.ads.helpers.getTime() + ' I: ' + '%c' + str, 'background:black;color:orchid;font-weight:bold', 'background:black;color:limegreen;font-weight:bold' ); }, logTimer: function(str) { console.log('%cI will ' + str, 'background:orange;color:red'); }, logTimerPaused: function(str) { console.log('%cI ' + str, 'background:green;color:white;font-weight:bold'); }, getTime: function() { var d = new Date(), h = d.getHours() + '', m = d.getMinutes() + '', s = d.getSeconds() + ''; h = h.length < 2 ? ('0' + h) : h; m = m.length < 2 ? ('0' + m) : m; s = s.length < 2 ? ('0' + s) : s; return h + ':' + m + ':' + s; } } } googletag.cmd.push(function() { var pubads = googletag.pubads(); pubads.set('page_url', location.href); pubads.collapseEmptyDivs(); pubads.enableSingleRequest(); pubads.disableInitialLoad(); googletag.enableServices(); }); if (ltk.type !== 'Slideshow') { ltk.ads.listen('impressionViewable', ltk.ads.handleImpressionViewable); ltk.ads.listen('slotVisibilityChanged', ltk.ads.handleSlotVisibilityChanged); } ltk.ads.listen('slotRenderEnded', ltk.ads.handleSlotRenderEnded); What Is An Allowance for Doubtful Accounts?

What Is An Allowance for Doubtful Accounts?

T.J. Mimbs
Businesspeople shaking hands

Offering goods and services on credit has become one of the cornerstones of the modern economy. The practice has drastically increased the purchasing power of consumers and selling power of businesses. However, it has also brought about more negative issues. Namely, when a company extends credit to a customer, it runs the risk of never receiving payment for the goods or services provided. Therefore, today's businesses must account for this possibility in order to accurately reflect their income.

Accounting for Bad Debt

One method used to account for the problem of bad debt is to create an Allowance for Doubtful Accounts. In technical terms, this is an account that offsets Accounts Receivable in order to show the business owner, or potential investors, how much money he or she can reasonably expect to receive in the end. This is known as the net realizable value of Accounts Receivable. The value of the Allowance for Doubtful Accounts is really just the best estimate an owner or manager can make in advance.

Ways to Estimate Bad Debt

Methods for coming up with the aforementioned estimate include:

  • Risk classification, in which each customer is assigned a score based upon how risky they are perceived to be (similar to an individual's credit score)
  • Historical percentage of accounts receivable, in which the percentage of accounts receivable that were not collected in the past is used as the predictor of how much will not be collected in the future
  • Historical percentage of sales, in which the percentage of past sales that resulted in bad debt is used as the predictor of how much bad debt will exist in the future

Recording the Estimate

Once a company comes up with its best estimate of how much debt will not be repaid, it must record this amount using accounting entries. The purpose of these entries is to provide the most accurate picture possible of the company's position at a certain time.

Suppose a business decides to have an Allowance for Doubtful Accounts of $10,000 for a certain period. The initial journal entry would be as follows:

Bad Debt Expense --------------------------- $10,000

Allowance for Doubtful Accounts ---------------- $10,000

Bad Debt Expense is debited, and the Allowance for Doubtful Accounts is credited. Essentially, this entry reduces the company's reported income by $10,000 due to the fact that the business believes this money will never actually be received.

As time passes and the actual amount of bad debt becomes clearer, entries can be made to reflect this certainty. For instance, what if the actual amount of debt that is not repaid during a certain period is $3,000? In this case, the following journal entry would be recorded:

Allowance for Doubtful Accounts ---- $3,000

Accounts Receivable -------------------$3,000

While the rules of debiting and crediting accounts in this situation are a little convoluted, the result is that both the "allowance" account and Accounts Receivable are reduced.

Repaid Bad Debt

From time to time, a company may eventually manage to collect payments it had previously thought to be uncollectible. In this case, yet another accounting entry must be recorded to reflect this new development. For example, a customer could end up paying the $3,000 accounted for above. In this case, the journal entry would be as follows:

Accounts Receivable --------------------------$3,000

Allowance for Doubtful Accounts ---------- $3,000

As opposed to the previous entry, this entry increases both the "allowance" account and Accounts Receivable.

The Direct Write-Off Method

The method described above for dealing with bad debt is the one generally promoted by governments and regulatory agencies (and is consistent with GAAP). It is based on what is known as accrual basis accounting. This form of accounting holds that the recording of income, expenses, etc. should be based upon "economic events" and not actual cash transactions. This method ensures that a company's financial position is displayed based on sales that have been made and expenses that have been incurred, regardless of when the money changes hands.

Another way to account for bad debt is known as the direct write-off method. In this system, uncollectible debt is subtracted from a company's income at the time in which the company determines that debt to be uncollectible. The journal entry to record this occurrence is simply a debit (or increase) of Bad Debt Expense and a credit (decrease) of Accounts Receivable.

While this method is much simpler, it fails to properly match income received with expenses incurred. That is, the Bad Debt Expense will appear to have occurred later than it did, therefore reducing overall income for the wrong period of time.

In Practice

Just as an individual should be careful how much money he or she borrows, companies must take precautions to ensure that they do not extend too much credit. Owners and/or managers of a business should undertake an in-depth analysis of their situation and construct an appropriate credit policy.

The appropriate credit policy depends upon the company's industry and how much risk it is willing to take on, amongst many other factors, but a good rule of thumb is that a business should only sell goods or services on credit to buyers who are very likely to repay the debt.

What Is An Allowance for Doubtful Accounts?