Sales Tax Rates & Taxability Database
Overview
You can use the CCH Sales Tax Rates and Taxability Database (CCH database) most effectively and efficiently when you understand the parts of the database, their relationships, and the concepts behind the database construction. That’s why this guide includes listings of table structures, layouts, and other technical information, as well as instructions on how to use them. To get you started, the diagram below shows you how the various parts of the database relate to each other.
CCH Sales Tax Rates and Taxability Database Schema
To accurately calculate sales tax for any good or service, each individual tax needs to be considered from several angles. The first step is checking the taxing authority at the location. A taxing authority is any government agency (state, municipality, township, etc.) that can impose and collect sales and use taxes. An important part of the database is keeping track of the boundaries of each taxing authority’s jurisdiction. Once you have established that the
location is affected by a taxing authority, you must check two more factors. Since taxability varies greatly from one authority to the next, it checks to see if the product or service is taxable at that location. If the good or service is taxable, the tax rate is determined. Next, reporting
requirements, pass through rules, and calculation methods are checked. With this information, you can calculate and report a tax.
As diagrammed above, five general categories of data are needed to complete those steps: taxing authorities, geography, taxability, rates (including tax-on-tax), and codes tied to descriptions of goods and services. The next chapter discusses taxing authorities and their central role in the database.
Taxing Authorities
Taxing Authorities
All data in the various sections of the database are directly related to the taxing authority database table. The CCH database is organized around six types of taxing authorities:
Example 1
TaxAuthType | Description |
---|---|
0 | FEDERAL |
1 | STATE |
2 | COUNTY |
3 | CITY |
4 | LOCAL (i.e., Special Districts) |
5 | REPORTING AGENCY |
Federal Taxing Authorities impose specific taxes on goods and services nationally.
Example 2 (TaxAuthType = '0')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
1 | CA | CANADA REVENUE AGENCY | |
11 | GB | COMMISSIONERS OF CUSTOMS AND EXCISE | |
16 | US | FEDERAL COMMUNICATIONS COMMISSIONS | |
1004 | US | INTERNAL REVENUE SERVICE |
Note: When Federal taxes are presented in the TaxAuthority table, the State column will be blank.
State Taxing Authorities impose taxes on state-wide basis.
Example 3 (TaxAuthType = '1')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
13 | US | IN | INDIANA DEPARTMENT OF REVENUE |
14 | US | MT | MONTANA DEPARTMENT OF REVENUE |
15 | US | MT | MONTANA PUBLIC SERVICE COMMISSION |
22 | US | IN | INDIANA UTILITY REGULATORY COMMISSION |
29 | US | NE | NEBRASKA DEPARTMENT OF REVENUE |
32 | US | NE | NEBRASKA PUBLIC SERVICE COMMISSION |
County Taxing Authorities generally impose taxes for their own counties, and are not applicable on a state-wide basis.
Example 4 (TaxAuthType = '2')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
1000 | US | KS | MCPHERSON, COUNTY OF |
1001 | US | NM | LUNA, COUNTY OF |
1003 | US | KS | MEADE, COUNTY OF |
1005 | US | NM | MCKINLEY, COUNTY OF |
1006 | US | KS | MIAMI, COUNTY OF |
1007 | US | NM | MORA, COUNTY OF |
Note: There are cases when a county is listed as the Taxing Authority for a tax that extends beyond its geographical border.
City Taxing Authorities generally impose taxes for their own cities and are not applicable on either a county or state-wide basis.
Example 5 (TaxAuthType = '3')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
6125 | US | TX | NEW LONDON, CITY OF |
6127 | US | MO | CLAYCOMO, CITY OF |
6128 | US | OK | MUSTANG, CITY OF |
6130 | US | OK | NASH, CITY OF |
6131 | US | TX | NEW SUMMERFIELD, CITY OF |
6132 | US | MO | CLAYTON, CITY OF |
Note: As with counties, there are instances when a city is listed as the Taxing Authority for a tax that extends beyond the city limits.
Local (or Special) Tax Districts generally fall outside the four categories above. They are established for a specific purpose (that purpose is usually indicated by their name) and often cross over city and county boundaries. They include such things as Independent School Districts, Fire Districts, transit authorities, etc.
Example 6 (TaxAuthType = '4')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
2412 | US | KY | ASHLAND INDEPENDENT SCHOOL DISTRICT |
3452 | US | LA | NEW ORLEANS INTERNATIONAL AIRPORT TAX DISTRICT |
9614 | US | TX | MAVERICK COUNTY LFW & CDC DISTRICT |
10237 | US | IL | SOUTHWEST CENTRAL E911 |
11198 | US | WI | BASEBALL STADIUM DISTRICT |
9498 | US | SD | CHEYENNE RIVER SIOUX TRIBE, INDIAN COMMUNITY |
The Reporting Agency taxing authority type differs from the above categories. A Reporting Agency does not have authority to impose taxes. It acts as a collection agency for its Tax Authority. Usually, the state level taxing authority is also its own reporting agency. Sometimes independent agencies collect taxes for the state.
Example 7 (TaxAuthType = '5')
TaxAuthId | Country | State | AuthorityName |
---|---|---|---|
1550 | US | AL | ALATAX |
3908 | US | MI | MECEOLA CENTRAL DISPATCH |
628 | US | TX | NORTEX REGIONAL PLANNING COMMISSION (NORTEX) |
857 | US | KS | NECA SERVICES |
639 | US | CO | W-Y COMBINED COMMUNICATIONS CENTER |
Each tax in the database is connected to a specific taxing authority. When dealing with rates, each authority is referenced by its TaxAuthId or ReportTo codes. Some of the taxability rules in the Matrix table also reference the specific taxing authority.
After being connected to a taxing authority, each tax is related to its tax type (TaxType) and category (TaxCat).
The table below gives examples of how the geographic identifiers and tax authority types are represented for each of the six types of taxing authorities discussed above.
Example 8 (Geographical example of TaxAuthTypes by Geography [Geocode])
#2 | Country | State | Geocode | TaxAuthType | TaxAuth | [ReportType]3 | ReportTo |
---|---|---|---|---|---|---|---|
1 | US | US0000000000 | 0 | 16 | 0 | 16 | |
2 | US | US0000000000 | 0 | 1004 | 0 | 1004 | |
3 | US | OK | US4013713135 | 0 | 16 | 0 | 16 |
4 | US | OK | US4013713135 | 0 | 1004 | 0 | 1004 |
5 | US | NH | US3300710090 | 1 | 800 | 1 | 800 |
6 | US | NH | US3300710090 | 1 | 804 | 1 | 804 |
7 | US | KS | US2013368025 | 2 | 1020 | 1 | 862 |
8 | US | KS | US2013368025 | 2 | 1020 | 2 | 1020 |
9 | US | NV | US3200331900 | 3 | 785 | 3 | 785 |
10 | US | NV | US3200340000 | 3 | 787 | 3 | 787 |
11 | US | LA | US22051A0001 | 4 | 3452 | 1 | 2585 |
12 | US | LA | US2205338355 | 4 | 3465 | 2 | 2749 |
13 | US | AL | US0100103220 | 2 | 1274 | 5 | 1550 |
14 | US | AR | US0500316240 | 1 | 5760 | 5 | 5761 |
15 | US | HI | US1500332700 | 1 | 7658 | 5 | 7660 |
16 | US | TX | US4846975428 | 1 | 41 | 5 | 43 |
Geocode, TaxAuthType, TaxAuthId, ReportType and ReportTo need to be connected to the appropriate code tables to be translated into their descriptions~~ The TaxAuthType and ReportType are not represented in the Detail or Matrix tables, but they can be found through their connection to the Taxing Authority.
Note: Rows 3 through 10 indicate the TaxAuthType and the ReportType are the same. In row 11, a tax district (4) reports to the state taxing authority (1). In row 12 (in the same state) a different tax district (4) reports to the county taxing authority (2). Rows 13 through 16 indicate either a county taxing authority (2) or a state taxing authority (1) using an external reporting agency (5).
2 is a line number for purposes of illustration. It is not a column in the Detail (i.e., Rates) table.
3 Report Type is not a column in any of the tables. However, when joining the ReportTo column to TaxAuthority, the specific ReportType can be determined for a ReportTo identifier.
Geography
General
Accurately connecting each tax to a location is the most important factor. The database has two tables to make that connection: the Geocode table and the ZIP-Plus4 table.
The United States Postal Service®(USPS) ZIP Code™ system was set up for mail delivery. It is not related to taxing authority boundaries. While ZIP code information can be helpful, it is not an accurate way to determine the taxing authority for a sale. The only consistently accurate way to identify the taxing authority at any specific location is by a geocode
A geocode is a 12-character alphanumeric string that defines a specific country, state, county, locality and, where necessary, a unique combination of local taxes. The country is always represented by two characters (for example ‘US’ or ‘GB’).The rest of the code reads as: state = 2 characters, county = 3 characters, locality = 5 characters. For example, the city of Wichita, Kansas is located in Sedgwick County. Its geocode is US2017379000 where US is the country, 20 is the state code for Kansas, 173 is the county code for Sedgwick County, KS, and 79000 is the city code for Wichita. Special districts generally have an embedded ‘A’ at the beginning of the city portion of the geocode (e.g., US20173A0001, which represents the area covered by the Wichita Riverwalk Redevelopment District). The Plus4 table links specific ZIP Code/ZIP + 4 combinations to specific geocodes.
To trace a location’s taxes and taxing authorities, identify the specific ZIP Code and ZIP + 4 combination (in the Plus4 table). Then link it to the geocode table (using the geocode in the Plus4 table), or directly to the Detail table with the geocode. The Detail table contains the TaxAuth and ReportTo codes which, when connected back to TaxAuthority, provide the Authority and Reporting information.
The example below shows how the link between ZIP Codes, taxing authorities, and geocodes are inter-related.
1st: Plus4
Zip | Plus4Lo | Plus4Hi | State | Geocode |
---|---|---|---|---|
66775 | 4051 | 4051 | KS | US2013368025 |
2nd: Plus4 to Geocode for Zip Code 66775-4051
Country | State | County | City | TaxDistrict | Geocode |
---|---|---|---|---|---|
US | KS | NEOSHO | STARK | US2013368025 |
3rd: Segments of the rate records from Detail via the Geocode (from Plus4 or Geocode)
Geocode | TaxType | TaxCat | TaxAuth | ReportTo |
---|---|---|---|---|
US2013368025 | 02 | 01 | 1020 | 862 |
US2013368025 | u2 | 01 | 1020 | 862 |
4th: The TaxAuthority records for the above Detail records showing the TaxingAuthority (TaxAuth) and the ReportingAuthority (ReportTo)
TaxAuth | Country | State | AuthorityName | TaxAuthType |
---|---|---|---|---|
1020 | US | KS | NEOSHO, COUNTY OF | 2 |
862 | US | KS | KANSAS DEPARTMENT OF REVENUE | 1 |
From the Plus4 table, the ZIP Code 66775 connects to geocode US2013368025 which represents a portion of Stark, KS. Connecting the TaxAuth and the ReportTo codes to TaxingAuthority gives you the following information: both of these taxes are imposed by the County of Neosho (the TaxAuthType for the imposing authority is a county) – and both taxes are reported to the Kansas Department of Revenue. In the same set of illustrations, the TaxDistrict column in the geocode table is empty because the locality identified by the geocode is not itself sub-divided by any special tax districts.
Once you have made the connection between a particular ZIP Code/ZIP+4 combination to the Detail table, all relevant taxes can be retrieved for use in a transaction.
The database also includes Geographic Names Information System (GNIS) codes as part of the geocode table. GNIS codes are provided because they are a convenient standard reference for geography. These codes were designed for use by the U.S. Board on Geographic Names as a standardized index of named places. Do not use this information for determining taxability or tax rates. Since a named place may include more than one area with a unique combination of taxes, rates, reporting requirements, etc., the GNIS code is not specific enough to use in determining tax liability, proper reporting, or tax computation.
The Plus4 Concept
The ZIP+4 additions to the USPS ZIP Code system were added to make the original ZIP code system more specific. This level of specificity is critical to determine which geocode should be used.
There are six data elements in the Plus4 table: Zip, Plus4Lo, Plus4Hi, State, Geocode and MainRange.
The complete range of Plus4s for any ZIP Code is 0000 to 9999. In some cases, there may be only a single geocode associated with a ZIP Code. Other Zip codes may have several associated geocodes. When there is only one geocode, the Plus4 table will contain a single record for that ZIP Code.
Example 10 (ZipCode with a single Plus4 record)
[Plus4]
Zip | Plus4Lo | Plus4Hi | State | Geocode | MainRange |
---|---|---|---|---|---|
50265 | 0000 | 9999 | IA | US1915383910 | 1 |
[Geocode]
Country | State | County | City | TaxDistrict | Geocode |
---|---|---|---|---|---|
US | IA | POLK | WEST DES MOINES | US1915383910 |
In the above example, all ZIP+4 codes for the ZIP Code 50265 point to the same geocode.
In the other cases, where different ZIP+4 codes within the ZIP Code point to different geocodes, you must use the specific ZIP+4 code to determine which geocode applies. The Plus4Lo and Plus4Hi columns indicate the particular range of ZIP+4 codes that point to a specific geocode. If none of the Plus4Lo and Plus4Hi ranges matches the specific ZIP+4 code for the transaction, then the geocode of the first record of the set (i.e., the one with the 0000-9999 range) is used. This default value record is referred to in the database as the “main range” record.
The geocode that can be related to the greatest number of ZIP+4 codes within a ZIP Code coverage area is assigned to the main range record. This geocode is treated as the default location value for locations within that ZIP Code. The other records for ZIP+4 ranges within that ZIP Code represent exceptions to that default location.
Example 11
# | Zip | Plus4Lo | Plus4Hi | State | Geocode | MainRange |
---|---|---|---|---|---|---|
1 | 51246 | 0000 | 9999 | IA | US1911968160 | Y |
2 | 51246 | 2061 | 2064 | IA | US1911900000 | N |
3 | 51246 | 2092 | 2092 | IA | US1911900000 | N |
4 | 51246 | 7500 | 7572 | IA | US1911900000 | N |
5 | 51246 | 7574 | 7605 | IA | US1911900000 | N |
6 | 51246 | 7611 | 7615 | IA | US1911900000 | N |
7 | 51246 | 7700 | 7707 | IA | US1911900000 | N |
8 | 51246 | 7708 | 7709 | IA | US1911944670 | N |
9 | 51246 | 7710 | 7797 | IA | US1911900000 | N |
10 | 51246 | 7808 | 7808 | IA | US1911900000 | N |
NPANXX: Landline Telephone Connection to Geography
In addition to ZIP code and their Plus-4 extensions, a third table, NPA-NXX, connects to the geocode through telephone area codes and exchange prefixes. However, using the NPA-NXX to identify appropriate geocodes has limitations. It can only be applied to landline phones using the Public Switch Telephone Network. VOIP, cell phones, pagers, and other personal electronic devices with phone function cannot be used in conjunction with NPA-NXX for geocode referencing.
The NPA-NXX table contains four pieces of information: the three-character NPA (Numbering Plan Area code), the three character NXX (or Central Office or Exchange Code), the three character LATA (Local Access and Transport Area) and the geocode mapped to it.
Beyond its telecommunications industry applications, this table can help you find an appropriate geocode for a customer even if the only information in your database is their land line telephone number. For example, if you had a customer living in Peabody, MA tied only to a phone number in your database, you could identify the appropriate geocode by querying the NPA-NXX table for (978) 954-1234.
NPA | NXX | LATA | GEOCODE |
---|---|---|---|
978 | 954 | 128 | US25000952490 |
Note About Canadian Geocodes
Canadian taxes are tracked at the provincial level; therefore each Canadian province is assigned only one geocode. Users of the data can locate the appropriate geocode for the province in the Geocode table by searching using the province abbreviation in the State field.
Taxability
General
Once the transaction location is determined, TaxType and TaxCat are used to determine taxability. Taxability defines how a tax is applied to some combination of Groups, Items, Customers, Providers and Transaction Types. The terms Group and Item refer to goods and services provided. Customer, Provider and Transaction Type refer to the nature of the transaction and the parties engaged in it. Data for taxability issues is maintained in the Matrix table. The terms TaxType and TaxCat refer to the most general definition of a class of taxes. The first few TaxTypes are generally locational. The TaxCat says something about a kind of tax related to a given TaxType. For example, TaxCat ‘01’ represents general sales taxes.
Before reviewing examples of the fundamental kinds of taxability data, it is important to understand the components mentioned above.
Example 12 (the most basic Sales Tax Tax Types)
TaxType | TaxCat | General Description |
---|---|---|
01 | 01 | State level sales tax |
02 | 01 | County level sales tax |
03 | 01 | County-Local level sales tax |
04 | 01 | City level sales tax |
05 | 01 | Local (Special District) level sales tax |
“Group” refers to categories of charges. “Item” refers to the specific type of charge related to a line item. You should map your invoice codes to the ProductGroup and ProductItem codes.
Example 12 (items contained in Group '0003' : CLOTHING-GENERAL)
Group | Group Description | Item | Item Description |
---|---|---|---|
0003 | CLOTHING-GENERAL | 001 | GENERAL CLOTHING/FOOTWEAR |
" | " | 002 | CLOTHING (FUR REPRESENTS MORE THAN 50% OF THE GARMENT-S VALUE) |
" | " | 003 | FORMAL WEAR |
" | " | 004 | NOTIONS |
" | " | 005 | BELT BUCKLES |
" | " | 006 | CHILDREN-S COSTUMES |
" | " | 007 | ADULT COSTUMES |
" | " | 008 | HAIRBOWS |
" | " | 009 | HANDKERCHIEFS |
" | " | 010 | SYNTHETIC FUR |
" | " | 011 | RECEIVING BLANKETS |
" | " | 012 | CRIB BLANKETS |
" | " | 013 | CHILDRENS CLOTHING |
“Customer” refers to the categories of purchasers of taxable goods and services. “Provider” refers to the categories of goods and services providers.
Note: The examples here are from the full Group and Item code tables
Example 13 (Customers)7
Customer | Description |
---|---|
00 | RESIDENTIAL |
08 | RETAIL |
99 | DEFAULT |
Note: The examples here are from the full Customer and Provider code tables
Example 14 (Providers)
Provider | Description |
---|---|
00 | LEC - REGULATED |
70 | RETAIL |
99 | DEFAULT |
Unless there is a specific exception, both Customer and Provider utilize the ‘99’ code to indicate the default values for all Customers or all Providers for a specific Group and Item.
In the database, there are currently two Transaction Types: Sales or Purchase. In the Matrix table, these are referred to simply as Transaction.
Example 15 (Transaction Types)
Transaction Type | Description |
---|---|
01 | SALES |
02 | PURCHASE |
Taxability for goods and services varies from jurisdiction to jurisdiction. So, to make sure the taxability calculation is correct, codes identify situations where taxability varies by location or situation.
To be efficient, matrix taxability data is organized downward. Most decisions for a given TaxType- TaxCat-Group-Item-Customer-Provider-TransactionType are represented at the state level, the highest level of taxability representation, and are said to be “State specific.”
If a given TaxType-TaxCat-Group-Item-Customer-Provider-TransactionType combination (TTGICPT) has no exceptions at any lower level (for example at the County level or at the City level), the taxability decision for that combination will be represented by a single record in the Matrix table. Exceptions to this are said to be “authority-specific” when a given Taxing Authority will have a different taxability decision for same TTGICPT. Similarly, exceptions based on differences of location (i.e., geocode) are said to be “geocode-specific.” Exceptions can also happen on the Customer-Provider portion of the record at all levels of taxability.
Taxability is indicated in the Taxable column of the Matrix table. It uses two values: 0, meaning not taxable, and 1 meaning taxable.
The three remaining data items in the Matrix table are Effective, PerTaxableType, and PercentTaxable. Effective indicates the date when a particular Taxability decision became effective. PercentTaxable indicates the “rate of the rate,” that is what percentage of the rate is used for calculating the tax for the given Group and Item. In most cases, its value is 1.000, indicating that the rates are applied at 100%. PerTaxableType is reserved for future development.
Illustrations of Taxability
The hypothetical examples given below serve to illustrate the various kinds of defaults and exceptions you’ll typically encounter in the Matrix table. The data points themselves are not found in the Matrix table.
Example 16 (State Level default taxability)
Geocode | TaxAuthId | Group | Item | Customer | Provider | Transaction | Taxable | TaxType | TaxCat |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | [NULL] | 0001 | 001 | 99 | 99 | 01 | 1 | 01 | 01 |
This is a state level taxability record. Note that only the country and the state codes are given in the Geocode column. The values for the county and city portions of the geocode are zeroes. Similarly, the Customer and Provider are 99s, indicating that the taxability for the TTGICPT applies to all customers and all providers by default. Note that the TaxAuthId column is NULL, indicating that State level taxability records are the default condition for the entire state no matter which specific taxing authority imposes this class of tax.
Deriving a specific taxability decision for a specific taxing authority from state level default records in the Matrix table is discussed in Chapter 7. It involves the relationship between Matrix and Detail (TaxAuthId is a key piece of information in the Detail table).
Example 17 (Taxing Authority Level exception to a State Level default)
Geocode | TaxAuthId | Group | Item | Customer | Provider | Transaction | Taxable | TaxType | TaxCat |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | [NULL] | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36000000000 | 1234 | 0001 | 001 | 99 | 99 | 01 | 0 | 02 | 01 |
Here we have a taxing authority level exception to the default state record. Note that the Geocode has the same content as the state default record. This is because, as the state default record covers everything for the state (jurisdictionally), a lower level taxing authority covers everything for itself. In this case, the overriding taxing authority has imposed a decision of NO taxability for the same TTGICPT.
Example 18 (Geocode Level exception to an Authority Level default)
Geocode | TaxAuthId | Group | Item | Customer | Provider | Transaction | Taxable | TaxType | TaxCat |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | [NULL] | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36000000000 | 1234 | 0001 | 001 | 99 | 99 | 01 | 0 | 02 | 01 |
US36001000001 | 1234 | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
This is a geocode exception to the taxing authority exception to the state level default. Although the given taxing authority overrode the state taxability decision, the geocode-level taxability decision reverts back to the state level decision for the same TTGICPT.In this example, the locality with the exception is associated with TaxAuthId as well as Geocode.
Example 19 (Geocode Level exception based on Customer difference)
Geocode | TaxAuthId | Group | Item | Customer | Provider | Transaction | Taxable | TaxType | TaxCat |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | [NULL] | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36000000000 | 1234 | 0001 | 001 | 99 | 99 | 01 | 0 | 02 | 01 |
US36001000001 | 1234 | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36001000001 | 1234 | 0001 | 001 | 01 | 99 | 01 | 0 | 02 | 01 |
In this example, the geocode-level taxability (“Yes”) applies to all customers except customer ‘01.'
Example 20 (Geocode Level exception based on Provider difference)
Geocode | TaxAuthId | Group | Item | Customer | Provider | Transaction | Taxable | TaxType | TaxCat |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | [NULL] | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36000000000 | 1234 | 0001 | 001 | 99 | 99 | 01 | 0 | 02 | 01 |
US36001000001 | 1234 | 0001 | 001 | 99 | 99 | 01 | 1 | 02 | 01 |
US36001000001 | 1234 | 0001 | 001 | 99 | 01 | 01 | 0 | 02 | 01 |
In this example, the geocode-level taxability (“Yes”) applies to all providers except provider ‘01’
Example 21 (Percent Taxable and PerTaxableType)
Geocode | TaxAuthId | Group | Item | Transaction | Taxable | TaxType | TaxCat | PerTaxableType | PercentTaxable |
---|---|---|---|---|---|---|---|---|---|
US36000000000 | 1234 | 0001 | 001 | 01 | 1 | 02 | 01 | 01 | 1.000000 |
US36000000000 | 1234 | 0001 | 002 | 01 | 1 | 02 | 01 | 01 | 0.500000 |
US36000000000 | 1234 | 0001 | 003 | 01 | 1 | 02 | 01 | 01 | 0.850000 |
Example 21 contains three illustrations of PercentTaxable. When there is no deviation from the stated rate, the value in PercentTaxable is 1.000000. The second row of the example shows a PercentTaxable (that is, the “rate of the rate”) at 50%, meaning that the liable tax rate is 50% of the normal rate for the given tax. The third row shows a PercentTaxable of 85%, meaning that the liable tax rate is 85% of the normal rate for the given tax. There is currently only one value for PerTaxableType, ’01,’ which is defined simply as “Percent of Receipts Taxable.”
The possible scenarios are limited only by the imagination of the legislators for the various taxing authorities. They alter or impose taxability for taxes as they deem appropriate in their jurisdictions. The method for extracting the exact taxability decision for a given TTGICPT is discussed in chapter 7.
Note: For specific effective rates for a given group and item, legislators may impose rates that are functions of the rate for the given tax. For example, if the rate is .03500 (i.e., 3.5%) and the Percent Taxable value is 1.000 then there is no reduced rate. If, however the rate is .03500 and the Percent Taxable value is 0.7500, then the rate is calculated at 75% if its value [.035000 * .75] or 0.02625.
Rates
General
Rates describe the parts of the rate structure and how they are applied. Rate information is contained in the Detail table. Rate information is far more complex than taxability.
A given group-item-customer-provider-transaction type is either taxable or not taxable in a given place.Rates, however, include not only a set number of “core” values used in calculating the taxes charged for the given taxable goods or services, but also include other kinds of data that give specific meaning to one or more of the core elements. These are “definers.” Further, there are additional data elements called “peripherals” that describe specific rules about how the tax is executed, charged and reported. This combination of factors makes determining a rate more complicated than determining taxability.
The five elements that determine rates, and their corresponding columns in the Detail table, are:
Geography
Geocode geographic identifier for unique combinations of tax jurisdictions. For state level uses in Matrix, Detail and TaxOnTax, the Geocode contains the country and state codes followed by 8 trailing zeroes.
The tax itself
TaxType | General classification of tax |
TaxCat | More specific differentiation under the corresponding TaxType code |
TaxAuth | Numeric identifier for taxing authorities (which is blank for state level records) |
Core Values
TaxRate | Tax Rate applied to specific Tier (0, 1, 2, etc.) |
Fee | Fee applied per unit for specific Tier |
Tier | Sequence identifier used in calculating tax or fee thresholds |
MinTaxBase | Minimum dollar amount for specific Tier |
MaxTaxBase | Maximum dollar amount for specific Tier |
MinUnitBase | Minimum unit count for specific Tier |
MaxUnitBase | Maximum unit count for specific Tier |
MaxTax | Maximum permissible collectable tax |
Definers
UnitType | UnitType code (i.e. “per what”) |
MaxType | MaxType code (i.e. how aggregates are applied) |
ThreshType | ThreshType code (i.e. “split” or “spread” for aggregation) |
UnitAndOrTax | reserved |
Peripherals
PassFlag | Can the tax be passed on to the consumer |
PassType | How a tax is represented on an invoice |
BaseType | Is this tax imposed on the seller or the buyer |
Effective | Effective date |
DateFlag | Reserved |
Description | General description of the tax |
Rounding | Rounding level code |
Location | Code used on tax reporting forms |
ReportTo | Tax Authority ID to which tax is reported |
Formula | General method concepts for tax computation |
Geocode, TaxType, TaxCat and TaxAuth are already familiar from descriptions in the chapters of this manual dealing with Geography, Tax Authorities and Taxability.
Core Values and their Associated Definers
The two primary vehicles for computing taxes due are tax rates and fees. Tax rates are based on the sale price of the goods or services. Fees, however, are flat (i.e., static) amounts that are generally unrelated to the sale price. To calculate fees, the thing being taxed is computed on a unit basis. Tax rates generally cover anything that is not specifically unit based.
If we say that a tax is a 5¢ fee the real question is, “What exactly is being taxed?” Similarly, if a TaxRate is defined as 5% for the first $100, the question, “Per what?” applies. The expression “for the first $100” implies that a given tax can have more than one value for its rate or fee. This introduces the concept of “aggregation” which plays a major role in many rates and fees. Aggregation requires different kinds of qualification both in terms of “what” and “how.”
For fees, the “per what?” question initially can be answered in terms of its associated definer, UnitType:
Example 22 (selected Unit Types associated with Fees and Rates)
UnitType | UnitTypeDescription |
---|---|
00 | ACCESS LINE |
02 | ACCOUNT |
03 | kWh |
04 | THERM |
99 | N/A |
For example, a 5¢ fee with UnitType value of 03 means that the 5¢ is applied to each kWh billed. In the case of rates, the "per what" question is generally applicable when aggregation is involved. It is initially answered by its definer, MaxType which clarifies how aggregates are applied.
Example 23 (selected MaxTypes associated with Rates)
MaxType | MaxTypeDescription |
---|---|
00 | TOTAL TAXABLE RECEIPTS PER INVOICE |
01 | TOTAL TAXABLE RECEIPTS PER SINGLE ITEM |
03 | ACCUMULATED TOTAL OF CHARGES IN A UTILITY TAX YEAR (JULY/1 - JUNE/30) |
09 | MONTHLY TAXABLE RECEIPTS PER LOCATION |
15 | ACCUMULATED TOTAL OF UNITS PER MONTH |
99 | N/A |
Both UnitType and MaxType have a ‘99’ code, which is defined as Not Applicable (n/a). ‘99’ in this case means that nothing needs to be defined in terms of Units or aggregation. Rates which invoke aggregation methods require UnitType Definers when the MaxType value calls for unit level aggregation.
There is a complication, however. Some kinds of services can be measured in different ways, leading to potential discrepancies between the measure used on a billing invoice and that represented in the detail table. For example an invoice might calculate billing in terms of individual kWh, but the state regulation in the Detail table might specify the use of multiples of kWh. To reconcile these differences, the CCH database provides a cross reference table, UnitTypeXRef, which helps clarify potential discrepancies.
The UnitTypeXRef table contains four values for each record – the UnitType (as used in the Detail table), the SuppliedUnitType (that is, the UnitType as defined on the invoice that may use a different measure than the Detail table), the Operation (the mathematical operator defining how UnitType and SuppliedUnitType are reconciled) and factor (the mathematical constant used in conjunction with operation).
Example 24a (two pairs of related UnitTypes)
UnitType | UnitTypeDesc |
---|---|
00 | ACCESS LINE |
17 | SET OF 10 ACCESS LINES |
03 | kWh |
09 | mWh (1000 kWh) |
Example 24b shows UnitTypes 00 and 17 are variations of each other – although they describe essentially the same thing, access lines, the number that would appear in MinUnitBase and MaxUnitBase would mean quite different things if the invoice uses the ‘17’ definition and the tax rule uses the ‘00’ code. A similar potential problem exists between 03 and 09, Kilowatt Hours and MegaWatt Hours.
Example 24b (the resolution as found in UnitTypeXRef)
# | UnitType | SuppliedUnitType | Operation | Factor |
---|---|---|---|---|
1 | 00 | 17 | * | 10.000000000 |
2 | 17 | 00 | / | 10.000000000 |
3 | 03 | 09 | * | 1000.000000000 |
4 | 09 | 03 | / | 1000.000000000 |
Example 24b.1 illustrates a situation in which the invoice uses UnitType 17 and the Detail table represents the tax with UnitType 00. In this case, to correctly calculate the tax, the number of units must be multiplied by a factor of ten. Example 24b.2 illustrates the opposite condition: to correctly calculate the units must be divided by 10.
Often, a tax rate or fee changes when larger numbers of units are purchased or the price is higher. When a given tax has more than one TaxRate or Fee, we say it is “tiered.”
Example 25 (Fee based tiers utilizing MinUnitBase and MaxUnitBase):
Tier | UnitType | Fee | MinUnitBase | MaxUnitBase |
---|---|---|---|---|
0 | 03 | 0.00000000 | 0.00000 | 1000.0000 |
1 | 03 | 0.00441000 | 1000.00000 | 0.00000 |
Example 25 illustrates a set of tiers for a given fee based tax when there is more than one blanket fee. In this case, the fee for this tax when the aggregate amount is <= 1000 units is $0.00. That is indicated by the MinUnitBase and MaxUnitBase values with the Fee for that range. The initial row in the set of tiers, or base tier, for the given tax is always indicated ‘0’.
When the number of units is greater than 1000, the fee is then $0.00441000 per unit. This second row is always referred to as ’1’ – the second tier above the base tier is tier ‘2’, etc. There is no maximum number of units in this example, as indicated by the MaxUnitBase in the first tier (since, in this case, it is also the only tier in the sequence).
Example 26 (Fee based tiers utilizing MinUnitBase, MaxUnitBase and MaxType)
Tier | UnitType | Fee | MinUnitBase | MaxUnitBase | MaxType |
---|---|---|---|---|---|
0 | 03 | 0.00000000 | 0.00000 | 1000.0000 | 15 |
1 | 03 | 0.00441000 | 1000.00000 | 0.00000 | 15 |
Example 26 expands the same set of data as in Example 24 to include a defining MaxType. In this case, the example demostrates a set of tiers where the UnitType, Kilowatt Hours (kWh) are aggregated on the basis (MaxType) of accumulated total number of units per month.
Example 27 (Rate based tiers utilizing MinTaxBase and MaxTaxBase)
Tier | MaxType | TaxRate | MinUnitBase | MaxUnitBase |
---|---|---|---|---|
0 | 01 | 0.000000000000 | 00000000.00 | 100.00 |
1 | 01 | 0.010000000000 | 100.00 | 400.00 |
2 | 01 | 0.005000000000 | 400.00 | 0.00 |
Example 27 illustrates a hierarchy (or set of tiers) for a given rate based tax when there is more than one blanket rate. In this case, when the amount of the sale is <= $100.00 the rate for this tax is 0%. That is indicated by the MinTaxBase and MaxTaxBase values along with the TaxRate. The base tier, is always called “0”. The TaxRate goes up to 1% when the price exceeds $100.00 but is not greater than $400.00. This is tier “1”. When the price exceeds $400.00, the rate of 0.5% applies. This is tier “2”. There is no maximum value in the second tier of this example indicating that at price points above $400.00 the tax rate is 0.5%.
The MaxType provides the “per what” information, which gives the relationship between TaxRate, MinTaxBase and MaxTaxBase for each of the tiers a specific meaning. In this case, MaxType ‘01’ means Total Taxable Receipts Per Single Item. Without this clarification it would be impossible to know the basis or how to aggregate the applicable threshold.
Rates as a function of Units, Fees aggregated on MinTaxBase/MaxTaxBase
The scenarios described above account for approximately 95% of the data contained in the Detail table. The remaining 5% relies on three additional scenarios in which the question of rates and fees and their various definers cross over each other. Some rates are calculated as a function of units, with their fees aggregated on a “tax base” rather than a “unit base”. There are rates aggregated on both taxbase and unitbase as well as fees aggregated on taxbase and unitbase.
Example 28 (Rates calculated as a function units)
tier | Tax Rate | Max Tax | Max Type | Unit Type | MinTax Base | MaxTax Base | fee | MinUnit Base | MaxUnit Base |
---|---|---|---|---|---|---|---|---|---|
0 | 0.00 | 0.00 | 15 | 03 | 0.00 | 0.00 | 0.00 | 0.000 | 750.000 |
0 | 0.05 | 0.00 | 15 | 03 | 0.00 | 0.00 | 0.00 | 750.000 | 0.000 |
Example 28, a utility tax whose MaxType indicates that it is computed on the basis of accumulated total units per month has a UnitType of kWh (Kilowatt Hours). In this instance there is no tax liability while the number of units <= 750 per month. Once the number of units exceeds 750, the applicable rate is 5%.
Example 29 (Fees aggregated on MinTaxBase/MaxTaxBase)
# | tier | MaxTax | UnitType | MaxType | TaxRate | MinTaxBase | MaxTaxBase | fee | MinUnitBase | MaxUnitBase |
---|---|---|---|---|---|---|---|---|---|---|
28a | 0 | 0.00 | 03 | 06 | 0.00 | 0.00 | 3.00 | 0.01562600 | 0.00 | 117.11316 |
28b | 0 | 0.00 | 03 | 06 | 0.00 | 0.00 | 200.00 | 0.01476600 | 0.00 | 9937.93303 |
Example 29 has two different utility taxes, both of which have a defined UnitType of kWh (Kilowatt Hours) and a MaxType indicating that billing is computed on the monthly taxable receipts per invoice per utility. The interesting twist to these two taxes is that there are two operators which determine the maximum number of units and the maximum tax. In the first example (28a) the maximum sales price that can be taxed is $3.00, while the maximum number of units (kWh) is 117.11316. This means that the actual number of units subject to taxation in any given transaction is a function of the price per unit charged.
Using the data given in Row 28a, if we have 100 units and 10 of these have a total sale price = $3.00. This means only these 10 are subject to the .01562600 fee per unit (in this case, 10). The remaining units are not subject to the tax indicated (because the 11th would bring the sale price over the $3.00 MaxTaxBase).
Similarly, if the number of units sold is 150 and the sale price for these 150 units is <= $3.00, only 117.11316 of them are subject to the tax because of the MaxUnitBase limit of 117.11316.
Example 30 (Rates aggregated on both MinTaxBase/MaxTaxBase and unitbase)
# | tier | MaxTax | UnitType | MaxType | TaxRate | MinTaxBase | MaxTaxBase | fee | MinUnitBase | MaxUnitBase |
---|---|---|---|---|---|---|---|---|---|---|
30a | 0 | 0.00 | 00 | 00 | 0.05 | 31.40 | 0.00 | 0.00 | 0.00 | 100.00 |
30b | 0 | 0.00 | 03 | 16 | 0.1 | 0.00 | 4000.00 | 0.00 | 200.00 | 0.00 |
30b | 1 | 0.00 | 03 | 16 | 0.02 | 4000.00 | 6000.00 | 0.00 | 200.00 | 0.00 |
30b | 2 | 0.00 | 03 | 16 | 0.01 | 6000.00 | 0.00 | 0.00 | 200.00 | 0.00 |
Example 30 shows two different instances of rates aggregated both on MinTaxBase/MaxTaxBase and unitbase.
The first, 30a, a telecom tax whose UnitType is ACCESS LINE and whose MaxType is TOTAL TAXABLE RECEIPTS PER INVOICE is a single rate based tax (5%) that does not become applicable until the sales price is > $31.40. Only those charges for the first 100 access lines are subject to taxation.
The second, 30b, a utility tax computed in kWh, requires that there be more than 200 billable kWhs before any rate can be applied. The first 200 billable kWhs are not subject to taxation.
Assuming that the number of kWhs is > 200, then the base tier indicates the rate is 10% for any sale amount up to $4,000. The first tier above the base says a rate of 2% applies on that portion of the sale that is > $4,000 but <= $6,000. The second tier above the base says a rate of 1% applies on any sale amount above $6,000.
If we assume the minimum number of kWhs meets the stated criteria, and the total sale price for those kWhs exceeding 200 is $7,000, then the first $4,000 is taxed at 10%, the next $2,000 is taxed at 2%, and the remaining $1,000 is taxed at 1%.
Moving from Tier to Tier
What is not described by the various combinations of UnitType, Fee, MinUnitBase, MaxUnitBase, MaxType, TaxRate, MinTaxBase and MaxTaxBase is how you move from tier to tier. That is, how the rate or the fee of the next tier is applied when the price charged or units “consumed” exceed the limits of the previous tier. There are two methods used to determine the threshold where a subsequent tier supersedes a previous tier. These are referenced by the value in the ThreshType column of the Detail record.
The first category, the split method, takes the Fee, MinUnitBase, MaxUnitBase, TaxRate, MinTaxBase and MaxTaxBase values and applies them in order. Successive tiers of a given tax are applied to the marginal sales price or units consumed, represented by the range of the given tier. For example, if tier X of a given tax has a range of 500 – 1000, only the amount exceeding 500 and <= 1000 is subject to the rate for that tier.
The second category, the spread method, determines which tier applies to the total calculated amount (either sales price or unit volume or any applicable combination of both) and then applies only the values in that tier to the entire amount. Chapter 5.5 of this guide discusses Calculation Formulas and more precisely illustrates how these methods work in a number of scenarios.
By default, those tiers following the split method will have values of ‘0’ or ‘9’, while spread type thresholds will be indicated by ‘2.’ The following table shows the threshold types currently in use:
Example 31 (ThreshTypes)
ThreshType | ThreshTypeDesc |
---|---|
0 | TAXRATE AND/OR FEE APPLIES TO THE PORTION OF THE AMOUNT < OR = TO MAXTAXBASE AND/OR MAXUNITBASE |
1 | RESERVED |
2 | TAXRATE AND/OR FEE APPLIES WHEN THE ENTIRE AMOUNT IS < OR = TO MAXTAXBASE AND/OR MAXUNITBASE |
3 | RESERVED |
9 | N/A |
Example 32 (Rate based tiers utilizing MinTaxBase and MaxTaxBase and ThreshType)
Tier | MaxType | TaxRate | MinTaxBase | MaxTaxBase | ThreshType |
---|---|---|---|---|---|
00 | 01 | 0.000000000000 | 000000000.00 | 100.00 | ? |
01 | 01 | 0.010000000000 | 100.00 | 400.00 | ? |
02 | 01 | 0.005000000000 | 400.00 | 0.00 | ? |
Example 32 is a rate based tax utilizing MinTaxBase and MaxTaxBase. From the perspective of ThreshType ‘0,’ the split method, if the total value of the taxable line item (i.e., MaxType ‘01’) were $500, anything up to $100 would not be subject to a tax since it has no associated rate. Only that part of the line item between $100 and $400 (that is, the next $300) is subject to a 1% rate. And everything greater than $400 up to $500 (that is, the remaining $100) is subject to the 0.5% rate.
If we consider the same example from the perspective of ThreshType 2, the spread method, then if the total value of the taxable line item were $500 only tier ‘02’ would be applicable to the entire amount. If the total value of the taxable line item were <= $400 but > $100, then tier ‘01’ would apply to the entire amount. If the total value of the taxable line item were $100 or less, then no tax would apply.
Example 33 (Fee based tiers utilizing MinUnitBase, MaxUnitBase, MaxType and ThreshType)
Tier | UnitType | Fee | MinUnitBase | MaxUnitBase | MaxType | ThreshType |
---|---|---|---|---|---|---|
0 | 03 | 0.00000000 | 0.00000 | 1000.0000 | 15 | ? |
1 | 03 | 0.00441000 | 1000.00000 | 2000.00000 | 15 | ? |
2 | 03 | 0.00330330 | 2000.00000 | 5000.00000 | 15 | ? |
If we consider Example 33 from the perspective of ThreshType ‘0,’ the split method, when the unit count is <= 1000, no tax applies. If there are 6000 billable units, then the first 1000 above the initial 1000 (which are not subject to tax) would be subject to the 0.00441000 fee per unit. The next 3000 would be subject to the 0.00330330 fee per unit. The remaining 1000 units would not be subject to any tax.
Considered from the perspective of the ThreshType = 2, the spread method, there is no applicable tax since the total number of units billed, 6000, exceeds the MaxUnitBase value, 5000, in the highest tier listed for this tax. If the total unit count were greater than 2000 but <= 5000, then the fee in tier 02 would apply to the entire line item count. If the unit count were > 1000 and <= 2000, then tier 01 would apply to the entire item count.
The last of the core values is MaxTax. When a value > 0 is present in the MaxTax column, then an absolute cap has been placed on the calculated amount of the tax despite any other condition. MaxTax operates on the tax level and is not tier specific. However, the MaxType needs to be consulted in order to determine if the MaxTax is calculated on the line item or invoice level.
Example 34 (MaxTax)
MaxTax | UnitType | MaxType | ThreshType | tier | fee | MinUnitBase | MaxUnitBase |
---|---|---|---|---|---|---|---|
14.55 | 12 | 15 | 9 | 0 | 0.04450000 | 0.00000 | 1000.00000 |
14.55 | 12 | 15 | 9 | 1 | 0.04370000 | 1000.00000 | 0.00000 |
Example 34 illustrates a tiered, fee based utility tax with a MaxTax. The fee is based on the number of CCFs (100 Cubic Feet) (UnitType), and the tier thresholds are applied on the basis of the accumulated total of units per month (MaxType). If the number of CCFs is <= 1000, the rate is $0.0445 per CCF. If the number of CCFs is > 1000, the fee is $0.0437 per CCF exceeding 1000. However, the maximum amount of tax is limited to $14.55 despite the fee schedule established by the tier structure itself. Remember that although the MaxTax value appears in every tier, it is applicable on the tax level only.
An additional definer works with ThreshType, MinTaxBase/MaxTaxBase and MinUnitBaseBase/ MaxUnitBase. This definer, UnitAndOrTax, specifies criteria in recognizing thresholds applicable to taxes that have both a revenue and a unit determinant. This element is reserved and is not used at this time.
Peripherals
The fifth element in the description of rates and fees is a series of ten additional code fields which, with one exception, deal with ancillary aspects of the rate/fee.
PassFlag: Taxing authorities regulate whether sellers are permitted to pass a tax through to purchasers, and the form of that pass through. Sales tax, for example, is generally imposed on purchasers with the seller acting as collector for the tax authority. The seller is required to pass the tax on to the customer via a separate line item on the bill, using approved wording. Excise tax on the other hand, is ordinarily imposed on sellers, but sellers may have the option of including it in their rates or passing it on to consumers as a separate line item. Some taxes are prohibited from being passed on to consumers. The code indicating if a given tax can be passed along to the consumer is found in the PassFlag column.
Example 35 (PassFlag Codes)
PassFlag | PassFlagDesc |
---|---|
0 | Optional |
1 | Required |
2 | Prohibited |
PassType: Different taxing authorities have varying requirements defining how their taxes are to appear on invoices. The code indicating how a given tax is represented on an invoice is found in the PassType column.
Example 36 (PassType Codes)
PassType | PassTypeDesc |
---|---|
00 | Separate Line Item as tax |
01 | Separate Line Item as surcharge |
02 | Surcharge - but not as separate item |
03 | Include in Base Rate |
BaseType: Seller imposed taxes may be based on a variety of elements, such as a gross receipts, gross operating revenue, or receipts subject to income tax. Seller imposed taxes cannot always be directly passed on to the consumer. The codes that define the different BaseTypes (as a function of the tax as “belonging” to the consumer or the seller) are found in the BaseType table. A few examples are presented in Example 37 below.
Example 37 (Illustration of different BaseTypes)
BaseType | BaseTypeDesc |
---|---|
00 | Consumer - Sales Price/Service Charge |
01 | Seller - Gross Receipts |
03 | Seller - Minutes Carried |
06 | Consumer - Access Line |
23 | Consumer - Per Unit Billed |
Effective: The date when either a new tax or a revised tax becomes effective. The database does not distinguish between new and revised taxes. Updates to the database will indicate whether rows are expired or inserted, but inserts and expirations do not necessarily indicate a newly established tax, or a defunct one.
DateFlag: This field is currently reserved for future development.
Description: The description provides the name of the tax, or some descriptive phrase used to identify the tax. It is often used on invoices as the line item descriptor for the tax.
RoundingLevel: As with other Peripherals and Definers, the required method for rounding values is present in the detail table. The code’s value is found in the RoundingLevel table. At present, as in Example 39 below, there are two values for determining how rounding is accomplished.
Example 39 (Rounding Levels)
RoundingLevel | RoundingDesc |
---|---|
01 | Round on item level |
02 | Round on total |
Location: Some taxing authorities require a location code on forms used to report revenue and applicable taxes. These codes are authority-specific, and they are not necessary for calculations. There is no table to summarize or define them. They simply need to be present on whatever reporting forms are required by the given taxing authority.
ReportTo: Usually taxes are reported to the imposing authority. Sometimes, however, taxes are reported to another taxing authority or to an agency acting on behalf of the taxing authority. The ReportTo code points to the TaxAuth column in the TaxAuthority table. It gives the Country, State, AuthorityName and TaxAuthType of the Reporting Authority.
Calculation Formulas
Example 40 (Current Formulas)
calcid | Calcdesc |
---|---|
01 | Standard Rate, No Aggregation, Maxtype = 99 |
02 | TaxRate with split aggregation per invocie based on MinTaxBase for each single item, MaxType = 01 / ThreshType 2 |
03 | TaxRate with split aggregation per invoice based on MinTaxBase and MaxTaxBase, MaxType 01, ThreshType 2 |
04 | TaxRate with split aggregation for each single item based on MinTaxBase, MaxTaxBase, and invoice level split aggregation based on MinUnitBase, MaxUnitBase, MaxType = 20, ThreshType 2 |
05 | Standad Fee, No aggregation, Maxtype = 99 |
06 | Fee with split aggregation per invoice based on MinUnitBase and MaxUnitBase, MaxType Varies, ThreshType 2 |
07 | Fee with spread aggregation per invoice based on MinUnitBase and MaxUnitBase, MaxType Varies, ThreshType 2 |
08 | TaxRate with spread aggregation per invoice based on MinUnitBase and MaxUnitBase, MaxType Varies, ThreshType 2 |
09 | TaxRate with split aggregation per invoice based on MinUnitBase and MaxUnitBase, MaxType Varies, ThreshType 2 |
10 | TaxRate with split aggregation based on MinTaxBase and MaxTaxBase, MinUnitBase, MaxUnitBase per invoice, MaxType Varies, ThreshType 2 |
11 | TaxRate with spread aggregation based on MinTaxBase and MaxTaxBase for each single item, MaxType = 01, ThreshType = 2 |
12 | TaxRate with spread aggregation per invoice based on MinTaxBase and MaxTaxBase, MaxType 01, ThreshType = 2 |
99 | N/A |
As you use the database, your taxability determination will be refined as you combine the information in the database with the information you gather while doing business. Calculation Formulas provide the basic framework that describes the general methods used to calculate a particular tax. The formulae described below become even more effective as you learn to apply them to your business’s unique situation.
Formula 01 – describes a standard rate based tax where no aggregation or tier processing occurs on either the dollar amount of the sale or the number of units sold. The method to calculate the tax is rate * sale amount.
Formula 02 – is applied to rate based taxes where aggregation or tier processing is based on the sale amount per single item. In this case, either the MinTaxBase, or the MaxTaxBase or both can be > 0 (no MinUnitBase or MaxUnitBase), MaxType = 01 (total taxable receipts per single item) and ThreshType 2. Together, these indicate either a single rate with a specific threshold, or a set of tiers that operate using the split method (all tiers are applied as necessary). The definition of a single item can be understood from the UnitType value or, where UnitType = 99 from common usage. For example, is the single unit a single battery, or is it a single pack of batteries? That is determined by your coding.
Formula 03 – is applied to rate based taxes. It is similar to Formula 02. Due to its particular MaxTypes, it aggregates on the invoice level model. The MaxTypes indicate “per invoice” rather than “per item.”
Formula 04 – indicates a rate based tax which also has a unit count requirement. Aggregation or tier processing is required based on the sale price for each single item. Invoice level aggregation is applied based on the total units sold.
Formula 05 – is the fee based analogue to Formula 01. It is a flat fee based tax calculated solely on the basis of fee multiplied by the number of units sold.
Formula 06 – is a fee based tax where invoice level aggregation is required, depending on the number of units sold. It uses the split method of tiered calculations. Generally speaking, formula 06 deals with invoice based aggregation. However as with Formula 03, the database assigns Formula 06 to tax records where periodic aggregation is a factor.
Formula 07 – is similar to Formula 06 EXCEPT that tiers are calculated according to the spread method.
Formula 08 – is an aggregated rate based, invoice level tax, based on the number of units sold where the requirements of MinUnitBase and MaxUnitBase determine if the tax is applicable. It is aggregated according to the spread method.
Formula 09 – is similar to Formula 08 EXCEPT that the split method of aggregation is used.
Formula 10 – indicates an invoice level rate based tax which also has a unit count requirement. The aggregation or tier processing is based on the total units sold as well as the sale price per invoice.
Formula 11 – is a rate based tax that parallels Formula 02 (single item). The difference is its tiers are calculated using the spread method (in which a single tier applies to the whole transaction).
Formula 12 – is a rate based tax that parallels Formula 03 (invoice level). However, its tiers are calculated using the spread method (in which a single tier applies to the whole transaction).
Rates only package
The Rates Only Package includes only sales and/or use tax rates, without information on taxability.
Four primary tables (and their associated code tables) are used to determine rates without determining taxability: Plus4, Detail, Geocode, TaxOnTax, and TaxAuthority. CusomerType, ProviderType, TransactionType, ProductGroup, or ProductItem are taxability tables, so are not used in rates-only calculations. In the Detail (i.e. Rates) table, use taxes are identified with the letter “U” in the first character of the taxtype column.
Note: When you use the rates only table, calculations are made based on the assumption that your item or service is taxable. It is up to you to determine if the taxability assumption is correct.
You can integrate the rates only data into your accounting system by writing your own functionality to calculate taxes based solely on the database itself. Or, you can use calculations in your accounting package to define how the Rates Only data is used.
The two most common integration methods are:
- Operate on a flat schedule basis. Combined rates are maintained inside the accounting package based on specific geography (i.e. by geocode). Taxes are derived from the Detail table by combining tax rates by geocode.
- Use separate schedules on the basis of state, county, city and local level tax rates and query the Detail table by using taxauthtype.
See Chapter 6 if you need to calculate Tax On Tax.
Tax-On-Tax
Consumerbased and Providerbased Taxes
The discussion of the concept of tax-on-tax must begin by describing the differences between consumer-based and provider-based taxes. Generally speaking, consumer-based taxes assign the provider the role of agent for the authority imposing the tax. Any funds collected for consumer- based taxes are not considered to be part of a provider’s gross receipts. The money is not acquired as a function of the provider’s having added to the base amount of the billed sale. The money is collected to meet legislative requirements.
On the other hand, there are instances where the provider may have the option to pass on consumer taxes that are imposed on the provider. If your business passes the tax along to the consumer, the funds representing the passed through tax are added to the base amount of the invoice and are treated as taxable gross receipts to your business. They then become subject to various consumer- and provider-based taxes. This particular situation is the basis for tax-on-tax.
When applied in practice, a given TTGICPT is potentially subject to multiple taxes. Some of those taxes can be passed on to the customer. All of the taxes have to be evaluated against each other so the appropriate tax-on-tax calculations can be applied.
The table in the CCH database that provides tax-on-tax data is called TaxOnTax.This table contains seven elements: Geocode, TaxingTaxType, TaxingTaxCat, Taxable, TaxType, TaxCat and Effective. All TaxOnTax decisions are geocode based. That means, as with Detail and Matrix, the starting point for identifying TaxOnTax data is the geocode where the tax liability is under consideration. TaxType and TaxCat represent the base tax that potentially can be passed through to the customer. TaxingTaxType and TaxingTaxCat represent the tax that is imposed on the funds collected as the base tax and passed through to the customer. As in Matrix, the taxable column indicates the taxability decision.
When permitted, there are two kinds of rules that govern tax-on-tax – state level rules and local level rules. Given that tax-on-tax is geocode-specific, state level rules can be easily identified since the geocode for a state level rule will have only the country and state code with trailing zeros (US1000000000). Local level rules will have the full geocode with county and locality specified in addition to the state code (US1001000001).
Example 41 (Illustrations of TaxOnTax)
# | Geocode | TaxingTaxType | TaxingTaxCat | Taxable | TaxType | TaxCat | Effective |
---|---|---|---|---|---|---|---|
41a | US1000000000 | 42 | 01 | Y | 40 | 01 | 20000101 |
41b | US1000000001 | 42 | 01 | N | 40 | 01 | 20000101 |
Example 41 illustrates two instances of tax-on-tax. 41a demonstrates a state based rule. 41b demonstrates a local rule. In 41a, the provider is allowed to pass the tax defined as TaxType 40, TaxCat 01 in geocode US1000000000 to the customer. In doing so, however, the provider becomes liable for that pass through as a function of TaxingTaxType 42 and TaxingTaxCat 01. 41b represents a local override to the state rule for the taxing jurisdiction US1001000001. Even though the taxes represented by TaxType/TaxCat 40/01 are passed through to the consumer, the pass through amount does not become subject to TaxType/TaxCat 42/01.
To calculate tax-on-tax, the above can be summarized in three steps:
1. The user needs to capture all taxes imposed for each line item on an invoice (i.e., the applicable TaxTypes and TaxCats). For purposes of discussion let us say these taxes are placed in a table called YourLIST as follows:
Example 42 (illustration of applicable taxes for a given invoice’s items)
TaxType | TaxCate |
---|---|
01 | 01 |
02 | 01 |
03 | 01 |
Then cross join this table to itself in order to derive all the potential combinations of TaxType and TaxCat as follows:
Example 43 (joining a table to itself to produce all the possible permutations)
Select distinct
a. TaxType TaxingTaxType,
a. TaxCat TaxingTaxCat
b. TaxType
b. TaxCat
fromYourList a Cross join YourList b
Example 44 (results of Example 43's query based on Example 42)
TaxingTaxType | TaxingTaxCat | TaxType | TaxCat |
---|---|---|---|
01 | 01 | 01 | 01 |
01 | 01 | 02 | 01 |
01 | 01 | 03 | 01 |
02 | 01 | 01 | 01 |
02 | 01 | 02 | 01 |
02 | 01 | 03 | 01 |
03 | 01 | 01 | 01 |
03 | 01 | 02 | 01 |
03 | 01 | 03 | 01 |
2 -Query the TaxOnTax table to find records that match the cross joined list for the transaction location. Keep in mind that you have to account for potential overrides.
3 -Subject each matched record in YourLIST to calculation routines that capture the appropriate TaxOnTax amount.
The number of iterations of tax-on-tax processing is, by definition, a business decision that will depend on transaction size and the degree of precision required. As your taxes are calculated as percentages of a smaller base percentage, the tax amount will approach zero. For most transactions, the zero point is reached at the third or fourth iteration. Larger transactions and higher rates will require more iterations to reach zero.
Putting It All Together
Overview
Now that you understand the database components and the basics of taxability and rate determinations, you are better prepared to use the database accurately and efficiently. This section will guide you through learning how to put the components together. Sales and use tax is complicated so we can’t cover every possible situation, but the examples below were chosen to guide you through what you will probably encounter in the course of business. Once you learn the fundamentals you can adapt them to your particular business need.
Basic Assumptions
The old saying “garbage in/garbage out” is never more true than in working with a relational database. The only way you will get accurate taxability and rate determinations is by ensuring the business information you apply with this database is complete and correct. For example, accurate customer addresses are essential to the geocode-based process. You also need to know what type of customer is being billed, by what kind of provider. Before you start applying the database you’ll also need to map your existing goods and services codes to the CCH database. Taking time to set up all of the necessary information will mean your taxability and rate determinations are easy and accurate. To complete your calculations for an invoice, you’ll also need the price per unit charged for each of your goods or services, the total price for each line invoice line item, and the number of units sold.
Taxes for an invoice may require aggregation methods that cover more than one line item on the invoice. Depending on the kind of product or service sold and its applicable tax (or taxes), a single line item may require some form of aggregation. Keep in mind, however, this discussion is not concerned with aggregation over multiple line items.
There is a complication, however, in that some kinds of services can be measured in different ways, leading to potential discrepancies between the measure used on a billing invoice and that represented in the detail table. For example an invoice might calculate billing in terms of individual kWh while the state regulation might specify using multiples of kWh. To reconcile these differences, the CCH database provides a cross reference table, UnitTypeXRef, which helps clarify potential discrepancies.
For example, a line item might say 10 computers for a total price of $5000 (in which case the total price divided by the number of units gives the individual unit cost of $500), OR, 10 computers at $500 per computer (in which case the total price is the amount per computer multiplied by the number of computers, or $5000).
Some of the illustrations here involve sample SQL queries. The CCH database is standardized on TSQL for Microsoft SQL Server 2005. You should adjust your queries to the specific syntax of the version of SQL you are using.
Since the CCH Database is organized around specific geography, the first stage involves the use of geocodes, associated ZIP Codes and the specific ZIP+4 code applicable for the invoice and customer. From this point you can determine the list of applicable taxes for the geocode. For each applicable tax associated with the geocode you then determine taxability for the given group, item, customer and provider for the invoiced items, as listed in the Matrix table. For each taxable tax you then calculate the tax based on the data in the Detail table. Finally, you calculate tax-on- tax if appropriate. The steps are described in detail below.
The method for extracting data is given here as model SQL code. We will assign certain generic names to represent data elements specific to the seller’s side of the process to illustrate the various steps common to the broad scope of the process.
STEP ONE: GEOGRAPHY
Because the CCH Database is geographically oriented, the point of entry for the tax calculation process is a specific location (i.e., ZIP+4). The underlying assumption is that tax sourcing and nexus issues have been properly resolved by the vendor outside of this process. The examples that follow assume a tax jurisdiction sourcing of the ship-to address of the customer. First, then, you need @YOURZipCode and @YOURPlus4, which will provide @YOURGeocode.
Example 45 (determining Geocode with @YOURZipCode and @YOURPlus4)
set @YOURGeocode =
(select top 1 Geocode from Plus4 where zip = @YOURZipCode
and Plus4Lo <=@YOURPlus4 and Plus4Hi >=@YOURPlus4 order by MainRange)
The result of the query using @YOURZipCode = ‘10952’ and @YOURPlus4 = ‘1122’ is:
Geocode |
---|
US3608779174 |
STEP TWO: FINDING APPLICABLE TAXES (in general)
Before you can isolate specific applicable taxes for invoiced items, you must first determine which taxes in the detail table are applicable to YOURGeocode in question. Initially, we will put this information into a table called YOURSHORTLIST:
Example 46 (isolating potentially applicable taxes from Detail)
Select distinct TaxType, TaxCat,TaxAuthId
Into YOURSHORTLIST
From Detail
Where Geocode = @YOURGeocode
The results of this query will need to be reduced to a more specific list. To do that we will need more information. We need to know which TaxTypes, TaxCats and TaxingAuthorities exist in the geocode.
Example 47 (potential sales taxes based on @YOURGeocode)
TaxType | TaxCat | TaxAuthId |
---|---|---|
01 | 00 | 1468 |
01 | 01 | 1468 |
02 | 01 | 1782 |
03 | 00 | 3032 |
03 | 01 | 3032 |
STEP THREE: FINDING THE TAXABILITY DECISIONS
Since taxability is specifically a function of the items being taxed, you will need to have the codes representing invoice items mapped to groups and items in the CCH database. These are @YOURGroup and @YOURItem. The customer type will need to be associated with a specific code in the database, @YOURCustomer. The vendor will need to be mapped to the specific provider type which, @YOURVendor. The vendor must also determine the kind of transaction, @YOURTransType.
You’ll need to process each item to find any applicable taxes. Any items in YOURSHORTLIST that are not applicable should be deleted from the list or otherwise marked inapplicable. Since taxability, if it exists at all, is identified at the local level, the tax authority level or the state level, you may have to test for each of these separately.
Local Level Matching
Find TaxType, TaxCat, TaxAuthId and @YOURGeocode in Matrix where group = @YOURGroup, item = @YOURItem, customer = @YOURCustomer or ‘99’, provider = @YOURProvider or ‘99’, transtype = @YOURTranstype. If taxability is 0 (i.e., ‘N’) then the tax (as represented by the item in YOURSHORTLIST) is not applicable. It should be deleted or flagged.
If taxable = 1 (‘Y’) taxability has been established and so it is not necessary to continue testing this record. You can move on to the next item.
Authority Level Matching
If you did NOT make a match for your TaxType, TaxCat, taxauthority and Geocode then you have to attempt authority level matching.
Find TaxType, TaxCat, TaxAuthId and state level Geocode [that is substring(@YOURGeocode,1,4)+’00000000’] in Matrix where group = @YOURGroup, item = @YOURItem, customer = @YOURCustomer or ‘99’, provider = @YOURProvider or ‘99’, transtype = YOURTranstype. If taxability is 0 (i.e., ‘N’) then the tax (as represented by the item in YOURSHORTLIST) is not applicable, and should be deleted or marked accordingly.
If taxable = 1 (‘Y’) taxability has been established and so it is not necessary to continue testing this record. Move on to the next one.
State Level Matching
If you did NOT make a match for your TaxType, TaxCat, taxauthority and state level Geocode then you have to attempt state level matching. Find TaxType, TaxCat and state level Geocode [that is substring(@YOURGeocode,1,4)+’00000000’] in Matrix where TaxAuthId is blank (or NULL, depending on your database structure) and where group = @YOURGroup, item = @YOURItem, customer = @YOURCustomer or ‘99’, provider = @YOURProvider or ‘99’, transtype = @YOURTranstype. If taxability is 0 (i.e., ‘N’) then the tax (as represented by the item in YOURSHORTLIST) is not applicable. It should be deleted or marked accordingly.
If taxable = 1 (‘Y’) taxability has been established and so it is not necessary to continue testing this record. You can move on to the next item.
If not found altogether
If the record in YOURSHORTLIST fails all of these tests, there is no taxability for the TaxType- TaxCat-TaxAuthId-Geocode. This record is DELETED or marked accordingly. Then you move on to the next record.
STEP FOUR: FINDING APPLICABLE TAXES (specific)
The sales invoice for general merchandise below demonstrates how to apply the process.
Keeping in mind the various mapping issues and other pre-tax calculation decisions, we will establish the list of accountable elements and their associated SQL prototype variables as follows:
Example 48 (table of suggested variables for tax and taxability computation)
Variable | Value(s) | Comment |
---|---|---|
@YOURZipCode | 10952 | |
@YOURPlus4 | 1122 | |
@YOURGeocode | US3608779174 | |
@YOURTaxType | 01, 02 or 03 | (see Example 44) |
@YOURTaxCat | 00, 01 | (see Example 44) |
@YOURTaxAuthId | 1468, 1782, 3032 | (see Example 44) |
@YOURGroup | 0000 | (general, unspecified merchandise) |
@YOURItem | 000 | (general, unspecified merchandise) |
@YOURCustomer | 08 | (retail customer) |
@YOURProvider | 70 | (retail) |
@YOURTransType | 70 | (sale) |
@YOURTransDate | 08/12/2008 | invoice date |
For each potential tax listed in Example 47, we need to determine if taxability applies. For each row in YOURSHORTLIST the following SQL code returns taxable decisions (and PercentTaxable). Those whose taxable value is 1 (i.e., Y) remain in YOURSHORTLIST. Those whose taxable value is 0 (i.e., N), or NULL are deleted from the YOURSHORTLIST.
Example 49 (determining taxability row by row from YOURSHORTLIST)
Select top 1 taxable, PercentTaxable From Matrix
Where Geocode in (@YOURGeocode, substring(@YOURGeocode,1,4)+’00000000’)
and (TaxAuthId = @YOURTaxAuthId or TaxAuthId is NULL)
and TaxType = @YOURTaxType and TaxCat = @YOURTaxCat and [Group] = @YOURGroup
and Item = @YOURItem and Customer in (@YOURCustomer, ‘99’)
and Provider in (@YOURProvider, ‘99’)
and [Transaction] in (@YOURTranstype, ‘99’)
and @YOURTransDate >= effective Order by Geocode desc, TaxAuthId desc, customer, provider
Example 50 (result of processing the query in Example 46)
Row | TaxType | TaxCat | TaxAuthId | Taxable | PercentTaxable |
---|---|---|---|---|---|
1 | 01 | 00 | 1468 | NULL | NULL |
2 | 01 | 01 | 1468 | 1 | 1.00000 |
3 | 02 | 01 | 1782 | 1 | 1.00000 |
4 | 03 | 00 | 3032 | NULL | NULL |
5 | 03 | 01 | 3032 | 1 | 1.00000 |
After processing the query in Example 50 through the five potential taxes (01/00, 01/01, 02/01, 03/00 and 03/01), only three prove to be taxable. The taxes in rows 1 and 4 did not return any values and should be deleted from the list. Now we can go back to the Detail table and extract the rate information for each of the items in the invoice. Assuming for the moment that YOURSHORTLIST is a SQL table, you can derive the applicable taxes with a simple join between YOURSHORTLIST and Detail as follows:
Example 51 (extracting rate information from Detail by way of YOURSHORTLIST)
select distinct *
from Detail a
join YOURSHORTLIST b
on
a.TaxType = b.TaxType and a.TaxCat = b.TaxCat and a.TaxAuthId = b.TaxAuthId
where
a.Geocode = @YOURGeocode and
@YOURTransDate >= effective
The query in Example 51 produces the following information from Detail:
Example 52 (rate information derived from Detail by the code in Example 48)
Geocode | US3608779174 | US3608779174 | US3608779174 |
TaxType | 01 | 02 | 03 |
TaxCat | 01 | 01 | 01 |
TaxAuthId | 1468 | 1782 | 3032 |
Effective | 2005-06-01 | 2007-03-01 | 2005-06-01 |
Description | SALES TAX | CPIMTU SA;ES TAX | METRO COMMUTER TRANS. DISTRICT |
PassFlag | 1 | 1 | 1 |
PassType | 00 | 00 | 00 |
BaseType | 00 | 00 | 00 |
DateFlag | 02 | 02 | 02 |
Rounding | 02 | 02 | 02 |
Location | RO 3921 | RO 3921 | |
ReportTo | 1468 | 1468 | 1468 |
MaxTax | 0.00 | 0.00 | 0.00 |
UnitType | 99 | 99 | 99 |
MaxType | 99 | 99 | 99 |
ThreshType | 9 | 9 | 9 |
UnitAndOrTax | |||
Formula | 01 | 01 | 01 |
Tier | 0 | 0 | 0 |
TaxRate | 0.04000 | 0.04000 | 0.00375 |
MinTaxBase | 0.00 | 0.00 | 0.00 |
MaxTaxBase | 0.00 | 0.00 | 0.00 |
Fee | 0.00000 | 0.00000 | 0.00000 |
MinUnitBase | 0.00000 | 0.00000 | 0.00000 |
MaxUnitBase | 0.00000 | 0.00000 | 0.00000 |
Reading these results vertically, the three taxes (01/01, 02/01 and 03/01) can be read as:
The three different taxing authorities point to a state level tax, a county level tax and a special district level tax. All three of the taxes became effective before the invoice date of our example and are, therefore, in force. The PassFlag = 1 indicates all three taxes are required. The PassType indicates that the invoice must list the tax as a separate line item. The BaseType indicates that this is a consumer-sale price computation. The DateFlag indicates that the tax is charged as of the invoice date. Rounding indicates that the total tax, once computed, is rounded on the sum of computed taxes, and not on a line item basis. The ReportTo code is the same as the state taxing authority code, indicating these taxes are reported to the state taxing authority. The remaining data points collectively indicate these taxes are simple sales taxes based on the sale price of the taxable items and nothing else.
Each item on the invoice has three components – the state sales tax of 4%, the county sales tax of 4% and the special district tax of .375%. The items on our invoice have the following taxes associated with them:
Item | Cost | State tax (4%) | Count tax (4%) | Special District tax (.375%) | Total tax |
---|---|---|---|---|---|
6 Green Metallic Bridge Chair | $143.88 | $5.7552 | $5.7552 | $0.53955 | $12.04995 |
8" Plastic Stools | $13.98 | $0.5592 | $0.5592 | $0.052425 | $1.170825 |
$157.86 | Subtotal for computed taxes | $13.220775 | |||
============ | |||||
Rounded tax | $13.22 |
Our original invoice, when completed after the computation of the applicable taxes, now looks like this:
ASCII Files Table Layouts
General
This chapter lists the tables in the CCH Database. The list shows how the data is delivered, as opposed to how it would be represented in a SQL database. See Chapter 9 for sample SQL code for the creation of a SQL database for data presented in flat ASCII format.
Text Files
The ASCII (TXT) records provided each month are delimited with carriage return/line feed (CR/LF) characters. The following is a list of all text files.
The text files consist of six primary data tables and twenty-one code reference tables. Detailed descriptions of all the tables, their column by column definitions and functionality, as well as their uses and methods are found in the main documentation.
Those customers receiving the data in “Delta” format will find all tables containing an additional column. That column is “action,” a single character column indicating an Insert (“I”) or a Delete (“D”).
Primary Data Tables
1. Plus4 2. Matrix 3. Detail 4. Geocode 5. TaxOnTax 6. TaxAuthority 7. NPANXX **8.**TaxAuthType 9. TaxType 10. TaxCat 11. PassFlag 12 PassType 13. BaseType 14. DateFlag 15. RoundingLevel 16. UnitType 17. MaxType 18. ThreshType 19. CustomerType 20. ProviderType 21. TransactionType 22. PercentTaxableType. 23. UnitTypeXRef 24. ProductGroup 25. ProductItem 26. Country 27. State 28. CalculationFormula
1‐ PLUS4 Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | ZIP | 1 | 5 | Char | Postal ZipCode |
2 | Plus4Lo | 6 | 4 | Char | Low range for ZipCode Plus4 extension |
3 | Plus4Hi | 10 | 4 | Char | High range for ZipCode Plus4 extension |
4 | State | 14 | 2 | Char | State abbreviation |
5 | Geocode | 16 | 12 | Char | Geographic Identifier for unique combinations of tax juridictions. |
6 | MainRange | 28 | 1 | Int | PLUS4 range for zipcode (1=Y, 0=N) flag |
2‐ Matrix Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Geocode | 1 | 12 | Char | Geographic Identifier for unique combinations of tax juridictions. For state level taxes: country+state+8 zeroes |
2 | TaxAuthId | 13 | 9 | Int | Numeric identifier for taxing authorities (blank for state level records) |
3 | Group | 22 | 4 | Char | Product group code |
4 | Item | 26 | 3 | Char | Product item code |
5 | Customer | 29 | 2 | Char | Customer type code |
6 | Provider | 31 | 2 | Char | Provider type code |
7 | Transaction | 33 | 2 | Char | Transaction type code |
8 | Taxable | 35 | 1 | Int | Taxable fla g (1=Yes, 0=No) |
9 | TaxType | 36 | 2 | Char | TaxType code |
10 | TaxCat | 38 | 2 | Char | TaxCat Code |
11 | Effective | 40 | 8 | Date | Effective Date |
12 | PerTaxableType | 48 | 2 | Char | Percent taxable type code |
13 | PercentTaxable | 50 | 8 | Num | % of Rate or Fee applicable |
3‐ Detail Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Geocode | 1 | 12 | Char | Geographic Identifier for unique combinations of tax juridictions |
2 | TaxType | 13 | 2 | Char | TaxType code |
3 | TaxCat | 15 | 2 | Char | TaxCat code |
4 | TaxAuthId | 17 | 9 | Int | Numeric identifier for taxing authorities (blank for state level records) |
5 | Effective | 26 | 8 | Date | effective date |
6 | Description | 34 | 100 | Varchar | Tax description |
7 | PassFlag | 134 | 1 | Char | PassFlag code |
8 | PassType | 135 | 2 | Char | PassType code |
9 | BaseType | 137 | 2 | Char | BaseType code |
10 | DateFlag | 139 | 2 | Char | DateFlag Code |
11 | Rounding | 141 | 2 | Char | Rounding Level code |
12 | Location | 143 | 15 | Char | Code on tax forms for reporting purposes |
13 | ReportTo | 158 | 9 | Int | Tax Authority ID to which tax is reported |
14 | MaxTax | 167 | 8 | Num | Maximum tax amount |
15 | UnitType | 175 | 2 | Char | UnitType code |
16 | MaxType | 177 | 2 | Char | MaxType code |
17 | ThreshType | 179 | 1 | Char | ThreshType code |
18 | UnitAndOrTax | 180 | 1 | Char | Reserved |
19 | Formula | 181 | 2 | Char | Calculating formula code |
20 | Tier | 183 | 2 | Int | Sequence identifier used in calculating tax or fee thresholds. ‘0’ is always the default when no tiers are present. When tiers are present, ‘0’ represents the base tier (0 followed by 1, 2, 3, etc.) |
21 | TaxRate | 185 | 14 | Num | Tax Rate applied to a specific tier |
22 | MinTaxBase | 199 | 11 | Num | Minimum dollar amount for a specific tier |
23 | MaxTaxBase | 210 | 11 | Num | Maximum dollar amount for a specific tier |
24 | Fee | 221 | 12 | Num | Fee applied per unit for a specific tier |
25 | MinUnitBase | 233 | 15 | Num | Minimum unit count for a specific tier |
26 | MaxUnitBase | 248 | 15 | Num | Maximum unit count for a specific tier |
4‐ Geocode Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Country | 1 | 2 | Char | Country code |
2 | State | 3 | 2 | Char | State or Province code |
3 | County | 5 | 75 | Varchar | County name |
4 | City | 80 | 255 | Varchar | City or place name |
5 | TaxDistrict | 335 | 255 | Varchar | Special Tax district description (where applicable) |
6 | Geocode | 590 | 12 | Char | Geographic Identifier for uniqu combinations of tax juridictions |
7 | GNIS | 602 | 10 | Varchar | GNIS code |
5‐ TaxOnTax Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Geocode | 1 | 12 | Char | Geographic Identifier for unique combinations of tax juridictions. For state level records: country+state+8 zeroes. |
2 | TaxingTaxType | 13 | 2 | Char | Taxing TaxType code |
3 | TaxingTaxCat | 15 | 2 | Char | Taxing TaxCat code |
4 | Taxable | 17 | 1 | Int | Taxable decision (1= Yes, 0 = No) |
5 | TaxType | 18 | 2 | Char | TaxType subject to taxing tax |
6 | TaxCat | 20 | 2 | Char | TaxCat subject to taxing tax |
7 | Effective | 22 | 8 | Date | Legal effective date of the rule |
6‐ TaxAuthority Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | TaxAuthId | 1 | 9 | Int | Numeric identifier for taxing authorities (blank for state level records) |
2 | Country | 10 | 2 | Char | Country code |
3 | State | 12 | 2 | Char | State code |
4 | AuthorityName | 14 | 200 | Varchar | Tax AuthorityName |
5 | TaxAuthType | 214 | 1 | Char | Tax Authority Type code |
7‐ NPA‐NXX Record Layout
Pos | Len | Type | Field Description | |
---|---|---|---|---|
NPA | 1 | 3 | char | Numbering Plan Area Code |
NXX | 4 | 3 | char | Central Office or Exchange Code |
LATA | 7 | 4 | char | Local Access Transport Area Code |
Geocode | 11 | 12 | char | Geocode |
8‐ TaxAuthType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | TaxAuthType | 1 | 1 | Char | Tax Authority Type code |
2 | TaxAuthTypeDesc | 2 | 100 | Varchar | Tax Authority Type description |
9‐ TaxType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | TaxType | 1 | 2 | Char | TaxType code |
2 | TaxTypeDesc | 3 | 100 | Varchar | TaxType description |
10‐ TaxCat Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | TaxCat | 1 | 2 | Char | TaxCat code |
2 | TaxCatDesc | 3 | 100 | Varchar | TaxCat description |
11‐ PassFlag Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | PassFlag | 1 | 1 | Char | PassFlag code |
2 | PassFlagDesc | 2 | 100 | Varchar | PassFlag description |
12‐ PassType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | PassType | 1 | 2 | Char | PassType code |
2 | PassTypeDesc | 3 | 100 | Varchar | PassType description |
13‐ BaseType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | BaseType | 1 | 2 | Char | BaseType code |
2 | BaseTypeDesc | 3 | 100 | Varchar | Base Type description |
14‐ DateFlag Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | DateFlag | 1 | 2 | Char | DateFlag code |
2 | DateFlagDesc | 3 | 100 | Varchar | DateFlag description– currently reserved |
15‐ RoundingLevel Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | RoundingLevel | 1 | 2 | Char | RoundingLevel code |
2 | RoundingLevelDesc | 3 | 100 | Varchar | RoundingLevel description |
16‐ Unit Type Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | UnitType | 1 | 2 | Char | UnitType code |
2 | UnitTypeDesc | 3 | 100 | Varchar | UnitType description |
17‐ MaxType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | MaxType | 1 | 2 | Char | MaxType code |
2 | MaxTypeDesc | 3 | 100 | Varchar | MaxType description |
18‐ ThreshType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | ThreshType | 1 | 1 | Char | ThreshType code |
2 | ThreshTypeDesc | 2 | 100 | Varchar | ThreshType description |
19‐ CustomerType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | CustomerType | 1 | 2 | Char | CustomerType code |
2 | CustomerTypeDesc | 3 | 100 | Varchar | CustomerType description |
20‐ ProviderType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | ProviderType | 1 | 2 | Char | ProviderType code |
2 | ProviderTypeDesc | 3 | 100 | Varchar | ProviderType description |
21‐ TransactionType Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | TransactionType | 1 | 2 | Char | TransactionType Code |
2 | Description | 3 | 100 | Varchar | TransactionType Description |
22‐ PercentTaxable Type Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | PercentTaxable | 1 | 2 | Char | Code |
2 | Description | 3 | 100 | Varchar | PercentTaxableType description |
23‐ UnitTypeXRef Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | UnitType | 1 | 2 | Char | UnitType code referencing Detail |
2 | SuppliedUnitType | 3 | 2 | Char | UnitType code provided by user |
3 | Operation | 5 | 1 | Char | Reconcilliation of UnitType and SuppliedUnitType |
4 | Factor | 6 | 21 | Numeric | Mathematical value applied in operation |
24‐ ProductGroup Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Group | 1 | 4 | Char | Group Code |
2 | Description | 5 | 30 | Varchar | General category of goods and services |
25‐ ProductItem Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Group | 1 | 4 | Char | Product Code for item |
2 | Item | 5 | 3 | Char | Item code |
3 | Description | 8 | 100 | Varchar | Specific goods or servicesunder general group category |
26‐ Country Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Country | 1 | 2 | Char | Alphabetical code for the country |
2 | Name | 3 | 70 | Varchar | Name of the country |
27‐ State Record Layout
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Country | 1 | 2 | Char | Alphabetical Country code |
2 | State | 3 | 2 | Char | Alphabetical code for state or province |
3 | Name | 5 | 70 | Varchar | Name of the state or province |
28‐ CalculationFormula
Field Name | Pos | Len | Type | Field Description | |
---|---|---|---|---|---|
1 | Formula | 1 | 2 | Char | Calculation Formula ID |
2 | Description | 3 | 200 | Varchar | Calculation Formula Description |
Establishing SQL Tables
Some column names are considered reserved words in T-SQL. They must be encased in square brackets ([…]) when creating the tables that use them, and when those columns are addressed in queries. To ensure accurate representation of floating point numeric values those columns are given using SQL standard precision.
Plus4
create table Plus4
(Zip char(5),
Plus4Lo char(4),
Plus4Hi char(4),
State char(2),
Geocode char(12),
MainRange int )
Matrix
create table Matrix
(Geocode char(12),
TaxAuthId int,
[Group] char(4),
Item char(3),
Customer char(2),
Provider char(2),
[Transaction] char(2),
Taxable int,
TaxType char(2),
TaxCat char(2),
Effective datetime,
PerTaxableType char(2),
PercentTaxable numeric(7,6) )
Detail
create table Detail
(Geocode char(12),
TaxType char(2),
TaxCat char(2),
TaxAuthId int,
Effective datetime,
Description varchar(100),
PassFlag char(1),
PassType char(2),
BaseType char(2),
DateFlag char(2),
Rounding char(2),
Location char(15),
ReportTo int,
MaxTax numeric(7,2),
UnitType char(2),
MaxType char(2),
ThreshType char(1),
UnitAndOrTax char(1),
Formula char(2),
Tier int,
TaxRate numeric(13,12),
MinTaxBase numeric(10,2),
MaxTaxBase numeric(10,2),
Fee numeric(11,8),
MinUnitBase numeric(14,5),
MaxUnitBase numeric(14,5) )
Geocode
create table Geocode
(Country char(2),
State char(2),
County varchar(75),
City varchar(255),
TaxDistrict varchar(255),
Geocode char(12),
GNIS varchar(10) )
TaxOnTax
create table TaxOnTax
(Geocode char(12),
TaxingTaxType char(2),
TaxingTaxCat char(2),
Taxable int,
TaxType char(2),
TaxCat char(2),
Effective datetime )
TaxAuthority
create table TaxAuthority
(TaxAuthId int,
Country char(2),
State char(2),
AuthorityName varchar(200),
TaxAuthType char(1) )
NPANXX
create table NPANXX
(NPA char (3),
NXX char (3),
LATA char (4),
GEOCODE char (12) )
TaxAuthType
create table TaxAuthType
(TaxAuthType char(1),
TaxAuthTypeDesc varchar(100) )
UnitType
create table UnitType
(UnitType char(2),
UnitTypeDesc varchar(100) )
MaxType
create table MaxType
(MaxType char(2),
MaxTypeDesc varchar(100) )
ThreshType
create table ThreshType
(ThreshType char(1),
ThreshTypeDesc varchar(100) )
Customer
create table Customer
(CustomerType char(2),
CustomerTypeDesc varchar(100) )
Provider
create table Provider
(ProviderType char(2),
ProviderTypeDesc varchar(100) )
TransactionType
create table TransactionType
(TransactionType char(2),
Description varchar(100) )
Geocode
create table Geocode
(Country char(2),
State char(2),
County char(75),
City varchar(255),
TaxDistrict varchar(255),
Geocode char(12),
GNIS varchar(10) )
TaxType
create table TaxType
(TaxType char(2),
TaxTypeDesc varchar(100) )
TaxCat
create table TaxCat
(TaxCat char(2),
TaxCatDesc varchar(100) )
PassFlag
create table PassFlag
(PassFlag char(1),
PassFlagDesc varchar(100) )
PassType
create table PassType
(PassType char(2),
PassTypeDesc varchar(100) )
BaseType
create table BaseType
(BaseType char(2),
BaseTypeDesc varchar(100) )
DateFlag
create table DateFlag
(DateFlag char(2),
DateFlagDesc varchar(100) )
RoundingLevel
create table RoundingLevel
(RoundingLevel char(2),
RoundingLevelDesc varchar(100) )
PercentTaxableType
create table PercentTaxableType
(PercentTaxable char(2),
Description varchar(100) )
UnitTypeXRef
create table UnitTypeXRef
(UnitType char(2),
SuppliedUnitType char(2),
Operation char(1),
Factor numeric(20,9) )
ProductGroup
create table ProductGroup
([group] char(4),
Description varchar(30) )
ProductItem
create table ProductItem
([group] char(4),
Item char(3),
Description varchar(100) )
Country
create table Country
(Country char(2),
[Name] varchar(70) )
State
create table State
(Country char(2),
State char(2),
[Name] varchar(70) )
calculationFormula
create table calculationFormula
(CalculationFormulaId char(2),
CalculationFormulaDesc varchar(200))
Current Database vs. Legacy
General Observations
Users of the legacy CCH Sales and Use Tax Database will immediately notice many differences when comparing the older format and content of the data to its present form. The current database includes a number of enhancements as well as several key conceptual changes. This chapter introduces and explains those changes to users of the previous system.
The most obvious difference between the two databases can be seen in the greater number of tables1 in the current2 version. The older version had seven files: Plus4, ZIP, NPA/NXX, TXMatrix, Geocode, Detail and Code. The new version has four times as many tables. Of the original seven tables, only Plus4, TXMatrix (renamed Matrix), Geocode, Detail and NPA/NXX remain, although they have been changed. The older single Code table is now presented as a sequence of individual tables specific to the given code types which are referenced elsewhere in the database.
The most basic change from the older to the newer system is the organization of the data around Taxing Authority. Geocodes, which previously only generally described where a tax was in force, are now specifically associated with given taxing authorities. The TaxAuthID code now specifically describes a taxing authority, and has its corollary in the ReportTo code (the reporting or collecting agency for the given taxing authority). This allows the database structure to display individual instances of each tax for each authority.
1 ASCII flat source files which are ingested into whatever SQL database format the user of the data uses to house and process them.
2“New version” and “Current Version” are used interchangeably.
Geographical information is now contained in the Plus4 and Geocode tables. In the new structure both INOUTCITY and INOUTLOCAL are no longer needed and have been dropped. The new system with its granularized view of geographically bounded areas also provides references to GNIS3 codes. As mentioned in Chapter 3, however, the GNIS codes alone are not specific enough to use in determining tax liability, proper reporting, or tax computation.
To clarify the issue of national identity throughout the database, the geocode table now includes a country code (US = United States, CA = Canada, etc.). This will prove especially useful in distinguishing Canada, the country (i.e., CA) from California, the US State (i.e., CA).
TaxOnTax information was previously embedded in the TXMATRIX (i.e., Matrix) table. It is now contained in its own table.
The RECTYPE4 data point in the older TXMATRIX table is no longer present in the new Matrix table.
Use taxes are now specifically represented in Detail and Matrix by unique taxtypes and taxcats. Use taxes are now indicated simply by the letter ‘U’ appearing as the first character of a use taxtype. It is better, however, to reference the transaction type in Matrix to determine the appropriate taxes for a given transaction type.
Rate data includes a number of new items, including the taxing authority, the reporting authority, rounding factor, calculation formula (i.e., method) description, and aggregate thresholds for both rate and fee based taxes. Tiered taxes, which are handled in a completely different matter, are discussed below.
Tiered tax rates are now handled specifically rather than implicitly (see Chapter 5). The new system eliminates some of the previous data points and specifically indicates the base tier (i.e., tier=0) and all that flows from it (tier=1,2,3, etc.) when applied in the split or spread manner.
A group of rate rows for a given taxing authority-taxtype-taxcat now encompasses as many records as will fully and unambiguously describe a rate with all its tiers. Since all rates have at least one record, all initiating records for a given tax are always indicated as tier 0. This eliminates the need for the older Detail data points, and a number of taxcats, which generically implied the concept of aggregation.
Taxability data is now tax authority and geocode specific. Previously, a three-tiered representation of taxability was organized by City, County and State; whereas the present version, while maintaining the three part organization, reorganizes it around City (with specific geocode), Taxauthority (without specific geocode other than its state code) and State (with only the state specific geocode). Sales and Use taxes are listed separately. TaxOnTax now occupies its own table and has been removed from Matrix. Additionally, there are new markers for the transaction type, the percent taxable type, and the percent taxable.
3Geographic Names Information System
4Definition of rule, i.e., Group record, Item record, taxability Rule record, TaxOnTax record – taxability is now specifically and inextricably bound up in its relationship to rates as well as the division of all taxability into State, TaxJurisidiction and Local governance.
Comparison of the tables in both current and older versions
The following tables list all available data points in both versions of the four common tables. Where a field of the older version of the database is no longer available, or the meaning and/or content has changed, the column in the charts below labeled Current will have the value n/a. Where the field in the newer version is a new item, or when it has the same name as an older counterpart but the meaning has changed, the Previous column is marked n/a. New items are explicitly marked new which indicates data points not previously available in the older version.
Comparison of previous version of Detail vs. current version of Detail
# | Column | Previous | InUse | Current |
---|---|---|---|---|
1 | GEOCODE | Geographic Code | Y | Geographic identifier for unique combination of tax jurisdictions |
2 | INOUTCITY | In or out of city code | N | n/a [see taxjurisdiction/geocode] |
3 | INOUTLOCAL | In or out of local boundary code | N | n/a [see taxjurisdiction/geocode] |
4 | TAXRATE | Primary Tax Rate | Y | Tax Rate applied to specific tier |
5 | LOCATION | Location code for filling | Y | Code on tax forms for reporting purposes |
6 | TAXBASE | Tax revenue base (or threshold) | N | n/a [see mintaxbase, maxtaxbase] |
7 | MAXTAX | Maximum tax amount (cap) | Y | Maximum tax amount (cap) |
8 | EXCESSRATE | Second revenue tier tax rate | N | n/a [see tier, min and max taxbase, min and max unitbase] |
9 | EFFDATE | Effective Date | Y | now EFFECTIVE - Effective Date |
10 | TAXAUTH | Authority Level Code | Y | Now TaxAuthId - points to specific taxing authority ID |
11 | TAXTYPE | TaxType code | Y | TaxType code |
12 | TAXCAT | TaxCat code | Y | TaxCat code |
13 | DESC | Tax Description | Y | now DESCRIPTION - Tax Description |
14 | USETAXRATE | Primary use tax rate | N | n/a [see use taxtypes and detail] |
15 | UEXCESSRATE | Second tier use tax rate | N | n/a [see use taxtype and detail] |
16 | FEE | Primary flat fee per unit | Y | Fee applied per unit for a specific tier |
17 | UNITTYPE | Unit type - what is counted | Y | Unit type code - what and how it is counted |
18 | MAXUNIT | Maximum number of units taxed | N | n/a see [minunitbase/maxunitbase] |
19 | MAXTYPE | Level at which revenue | Y | How aggregates are applied |
20 | PASSFLAG | Pass Flag Code | Y | Can the tax base be passed on to the consumer |
21 | PASSTYPE | Pass Type Code | Y | How is the tax represented on an invoice |
22 | BASETYPE | Base Type Code | Y | Is the tax imposed on the seller or the buyer |
23 | UNITBASE | Unit base (or threshold) | N | n/a [see minunitbase/maxunitbase] |
24 | EXCESSFEE | Second unit tier flat fee per unit | N | n/a [see minunitbase/maxunitbase] |
25 | THRESHTYPE | Threshold Type | Y | Determining "split" or "spread" aggregation |
26 | UNITANDORTAX | Unitbase and/or taxbase | Y | n/a [presently reserved] |
27 | DATEFLAG | n/a | Y | n/a [presently reserved] |
28 | REPORTTO | n/a | Y | NEW: the reporting authority |
29 | ROUNDING | n/a | Y | NEW: rounding level code |
30 | FORMULA | n/a | Y | NEW: calculation formula code |
31 | TIER | n/a | Y | NEW: specific indicator of rate or fee sequence in aggregated rate taxes |
32 | MINTAXBASE | n/a | Y | NEW: Minimum dollar amount for specific tier |
33 | MAXTAXBASE | n/a | Y | NEW: Maximum dollar amount for specific tier |
34 | MINUNITBASE | n/a | Y | NEW: Minimum unit count for a specific tier |
35 | MAXUNITBASE | n/a | Y | NEW: Maximum unit count for specific tier |
Comparison of the previous version of Matrix vs. the current version of Matrix
# | Column | Previous | InUse | Current |
---|---|---|---|---|
1 | CITY | Place Name | N | n/a [see Geocode] |
2 | COUNTY | County Name | N | n/a [see Geocode] |
3 | STATE | Postal State abbrevation | N | n/a [see Geocode] |
4 | LOCAL | Local tax district flag | N | n/a [see Geocode] |
5 | GEOCODE | Geographic code | Y | Geografic identifier for unique combination of tax jurisdictions |
6 | GROUP | Product Group Code | Y | Product Group Code |
7 | GROUPDESC | Product Group description | N | n/a [see ProductGroup code table] |
8 | ITEM | Product Item code | Y | Product Item code |
9 | ITEMDESC | Product Item description | N | n/a [see ProductItem code table] |
10 | PROVIDER | Provider Type Code | Y | Provider Type Code |
11 | CUSTOMER | Customer Type Code | Y | Customer Type Code |
12 | TaxTypeT | TaxOnTax Base Tax Type | N | n/a [see TaxOnTax table] |
13 | TaxCatT | TaxOnTax Base Tax Category | N | n/a [see TaxOnTax table] |
14 | Taxable | Taxable Flag [char=Y or N] | Y | Taxable Flag [numeric 1=Yes, 0=No] |
15 | TaxType | TaxType code | Y | TaxType Code |
16 | TaxCat | TaxCat code | Y | TaxCat code |
17 | EFFDATE | Effective Date | Y | Now EFFECTIVE - effective date |
18 | RECTYPE | Record Category | N | n/a |
19 | TAXAUTHID | n/a | Y | NEW: Specific Taxing Authority for Tax |
20 | TRANSACTION | n/a | Y | NEW: Specific Taxing Authority for Tax |
21 | PERTAXABLETYPE | n/a | Y | NEW: percent taxable type |
22 | PERCENTTAXABLE | n/a | Y | NEW: actual percent of rate or fee applicable |
Comparison of the previous version of Plus4 vs. the current version of Plus4
Note: Both versions of the data points in these two tables remain unchanged, although the order of the columns has been changed.
# | Column | Previous | InUse | Present |
---|---|---|---|---|
1 | CITY | Place Name | Y | City or Place Name |
2 | COUNTY | County Name | Y | County Name |
3 | STATE | State abbrevation | Y | State or Province Code |
4 | GEOCODE | Geographic code | Y | Geographic identifier for unique combination of tax jurisdictions |
5 | COUNTRY | n/a | Y | New: Country abbrevation |
6 | TAXDISTRICT | n/a | Y | New: Name of Special Tax District (as appropriate - see Geocodes with embedded 'A') |
7 | GNIS | n/a | Y | New: Geographic Name Information System Code |
Assumptions and Requirements
General disclaimers
- All illustrations in this User’s Guide are intended solely as examples.
- The illustrations in this User’s Guide are only a small fraction of the total number of potential permutations. They are not intended to be exhaustive.
- The user is solely responsible for any aspect of any outcome of any calculation or quotation from the database.
- CCH does not provide, nor does it engage in any form of tax advice.
- CCH assumes no liability whatsoever for the outcome of calculations using the data.
- All uses of the data are subject to the terms of the licensing agreement.
- Use CCH database detailed guides for directions on how to map your business’s invoicing information to this database. Such issues may involve tax sourcing and dynamic transaction mapping of groups and items. Customers are expected to consult these guides as appropriate for the application of the data, as well as to understand the nature of the infrastructure, aside from the basic infrastructure needed to process the database’s data.
- Further, as stated previously, customers are solely responsible for the appropriate and accurate use of the data provided by the CCH database. All uses of the data should be tested prior to implementation for accuracy and acceptability. Clearly, the need for customers to seek the advice of tax counsel cannot be underestimated.
- In line with this, it is understood that dynamic mapping issues (for example, the 2 out of 3 rule in Interstate Telecom taxation) and other apportioning issues are not addressed in this User’s Guide.
Flat database concept
The single most important assumption about the data is that it is NOT historical. Each monthly feed of the database presents a “flat view” of the current state of the data as of the date of its production. Any data points which expire between one feed and the next are simply not present in the newer release (feed) of the data. Also, there is no forward history. That means any data that will become active at some point beyond the date of production of the current release are not present in the current release. It is, therefore, incumbent upon the user of the CCH database to track and maintain changes in the data from month to month.
In lieu of full data feeds, the CCH database is also supplied in a “delta” format in which only changes to the data are present. There are two categories of data for each table in the database – additions and deletions – those rows in the various tables that are added or deleted as a function of expiration, modification or instantiation. The rows no longer present due to rate or taxability expiration or replacement by virtue of update are marked as “D” [deleted]. The rows that are new to the data, or are updates to earlier versions are marked as “I” [insert].
Internal mapping
The proper use of the data also assumes that users will create and maintain all necessary internal mappings to the various code types that exist throughout the database. All points of information maintained by the CCH database that are applicable and/or relevant to the user will need to be mapped to the user’s own proprietary code identifiers.
Nexus and Tax Sourcing
The user of the CCH database will have to establish and maintain Nexus and Tax Sourcing outside of any process that uses the data. These are primary points of reference to any potential tax liabilities and responsibilities of the data user.
ASCII format of the Data
The CCH database is supplied as a series of ASCII files. ASCII (or American Standard Code for Information Interchange) is the most universal encoding scheme for binary representation of symbolic data on computers. Because its fundamental format is not specific to any particular Relational Data Base Management System or data storage paradigm, it is accessible to all. As the table layouts in Chapter 9 indicate, each record (or row) in each supplied table occupies one carriage-return/line-feed (hex 0d0a) terminated line in the given file. Using the table layouts, you devise the appropriate algorithm to parse each line of each file. You can then load the individually parsed items into the tables and columns you designate for the storage and use of the CCH supplied data.
Those users who receive only the change files (the “Deltas”) will have the same set of tables as those who receive the full load. (“Rates Only” customers are the exception. They will not have the Matrix table). The naming convention for change files and full files are identical. The only structural difference is an additional column, “action,” added at the end of each row. A row that is new or which represents an edit are marked ‘I’ – a row that is to be deleted is marked ‘D’. Any table which has no new data is delivered as an empty file (i.e., 0 byte length).