Control uses Avalara to calculate and process taxes. Using this sales tax automation service provides an the user an easy and hassle free way to get accurate and up-to-date tax rates for orders.

AvaTax is a service by Avalara that provides tax information for the entire US. Avalara is general purpose software, not specific for the sign or graphics industries. It is intended for retail as well as commercial businesses. Cyrious does not intend to implement every option available to Avalara subscribers. Instead, only those tax options commonly used by sign and graphic companies will be supported at this time.

Post Sale Edits

Control will use the Order's sales date when processing taxes through Avalara. All adjustments made after an order has been marked Sale, the sales date will be sent to Avalara to maintain the tax rate during that time frame.

In order to use AvaTax within Control, users must meet the following requirements:

  • Have purchased the Tax module for Control from Cyrious.
  • Have established an account with Avalara. Avalara typically charges on a per-transaction basis for tax lookups.
  • Have a permanent Internet connection from the computer running the Cyrious SSLIP applicaiton.

Open the following ports on any firewall to allow communication between the SSLIP and the AvaTax system: 443 - HTTP-Secure (HTTPS) and 993 - Secure Socket Layer (SSL)

As with other external communication, the SSLIP will be the conduit for all communication with the AvaTax system. The sequence will be:

  1. A tax lookup event is triggered in Control.
  2. An order-level tax message is created containing:
    1. The source and destination address for the order.
    2. The source and destination address for each line item, if overridden.
    3. The product, pre-tax sale amount, and product tax code for each line item.
  3. Each Source address is validated as it is added to the message if it is not already validated.
  4. Each Destination address is validated as it is added to the message if it is not already validated. On average, this is expected to produce less than one address validation messages per order (since orders to repeat addresses should already be validated.)
  5. Control sends a message to the SSLIP requesting tax information lookup.
  6. The SSLIP sends a request to AvaTax requesting tax information lookup.
  7. AvaTax responds to the SSLIP with the information.
  8. The SSLIP responds to Control with the information.
  9. Control returns the requested tax rates.

The following timeout events may be encountered:

  • The SSLIP waiting on connection to AvaTax. Maximum wait time, none. If no connection can be made, terminate as soon as possible and notify the user that a connection to AvaTax could not be made.
  • The SSLIP waiting on response from AvaTax. Maximum wait time, 30 seconds. If no response is received, terminate the connection and notify the user.
  • Control waiting on response from the SSLIP. Maximum wait time, 60 seconds. A visual “working” screen should tell the user it is retrieving tax information via the web.

A new type of system Tax Class called “Online Lookup” will be created. All tax lookups will be associated with this new Tax Class. This account will be automatically treated as inactive unless the Tax module is authorized. The user will not be able to delete this account or set it inactive manually, but can change the name.

The user must be able to set Online Lookup as the default tax class.

The Auto Lookup Tax Class will reference one system tax account, called “Online Taxes”. This account will be automatically treated as inactive unless the Tax module is authorized. The user will not be able to delete or make any changes to this account.

In earlier versions of Control, each product (in product setup) may be specified to be taxable, non-taxable, or exempted from specific taxes. In Control version 4, Product Taxability Codes (PTCs) are used to identify the tax treatment for products.

PTCs may be set to one of the following taxability options:

  • Taxed - indicating the product is taxed at normal rates.
  • Tax Exempt - indicating the product is exempted from all taxes.
  • Partially Tax Exempt - indicating the product is exempted from certain taxes. A checklist of taxes is presented to select which taxes this product is exempt from.

The following PTCs are created automatically by the system:

  • Goods - used for signs, prints and other graphic manufactured items.

Taxability set to "Taxed".

  • Services - used for design, installation, and other services.

Taxability set to "Tax Exempt".

  • Resold Items - used for outsource and resold items.

Taxability set to "Taxed".

  • Shipping - used for freight and shipping.

Taxability set to "Taxed".

  • Installation - used for installation items.

Taxability set to "Taxed".

Each fully taxed product is updated to be “Goods”. Each non-taxable product is updated to be “Services”. PTCs will be automatically created for any product which is partially exempted, and the corresponding adjustment made. A store wide default PTC may be set, and will initially be set to Goods.

When using AvaTax, each PTC will have a corresponding Tax Code. The tax code will be used in AvaTax to determine the taxability of the product. The Tax Code will default to the PTC name. If the accounting module is not authorized, the user will not see the corresponding Tax Code.

The Shipping Taxability Code uses FR020100 to take advantage of the automatic tax calculation for shipping to different states.

The general ledger will need to store the following additional information about all sales tax entries:

  • Product Taxability Code (PTC)

The following store settings will be established on a Tax Lookup setup frame:

  • Avalara Account Number
  • Avalara AvaTax Connection URL

The following other options will be on the tax frame.

Auto-Validate Options: (See Address Record Changes)

  • Auto-complete and validate address during address entry.

Validation Update Options: (See Address Record Changes)

  • Always update the address with the validated address
  • Never update the address with the validated address
  • Prompt to update the address with the validated address

AvaTax has the ability to verify addresses and return the corrected address. The following validated information will be stored in Cyrious:

  • Address, properly formatted according to USPS rules
  • City
  • State
  • Zip-9
  • County
  • Country - US or Canada

Additionally, the address record must know IF it was validated. This should be set upon validation and cleared when any field in the address changes (forcing re-validation).

Some customer may not wish for the address to be rewritten with the validated address, as words like “Highway” become the terser “Hwy”. For these users, the option is given in system setup:

  • Always update the address with the validated address
  • Never update the address with the validated address
  • Prompt to update the address with the validated address

In all cases, this information will be stored with the address record in the customer, contact, and/or order. The tax calculations REQUIRE validated addresses in order to compute. When the address record is not directly updated, the validated address should still be stored in an XML memo in the record for the program to access.

Another option that should be made available in System Setup is:

  • Auto-complete and validate address during address entry.

If this option is selected (it should default to on), as soon as the user types the address, city, and state or the address and postal code, the address authorization should be called and the complete address set.

Some tax authorities require the source (Ship-From) location as well as the destination (Ship-To) addresses. Because the system does not know in advance if it is required, the source address is a requirement for all orders.

The option to add multiple addresses to the store record was added in Control 3.1. These addresses will now be used to fill a drop-down of Ship-From locations in the order/estimate record, although other addresses may be used. (See Order Entry Changes.)

The options for tax lookup should change for the customer. The drop down list for “Default Tax Class” will include the new tax class, “Online Lookup”, for anyone using AvaTax.

The option to “First Try to Lookup by Postal Code” should be hidden (removed) for anyone with the online tax module..

Setting the division of a company will cause it to use the default ship-to location of that division.

The options for Postal Code Tax Class should be removed from the System Setup and other menus for customers with the online tax option. This option will not be available, since it is a manual approximation of what the online tax option provides.

The first addition to the order and line items is to add a source (ship-from) address. This is used to determine the origin of the shipment for product. The ship-from addresses will be selected from a drop-down box with the following entries (in this order):

  • Company Billing - The main company address.
  • Company - Other company addresses from store setup.
  • Division - When divisions are used, the address for each division (excluding the Company) should be included.
  • Choose … - Some option to allow the customer to choose an alternate address.

The drop-down should fill in with something like the following:

Company Billing - 12627-C Jefferso

Company Florida - 1932 North Blufo

Division Reselling - 555 Main Street,

Choose Other …

The default address should be the address that corresponds to the division of the order. If divisions are not enabled, then the Company Billing address should be the default.

For orders, the Ship-From address combo box should be located on the Customer tab in Order Entry.

For line items, the Ship-From value will default to the order's Ship-From value. However, on the advanced screen for the line item the user should have the ability to change this setting. The same drop-down and options should be given to the user.

The Ship-To address handling also needs to change in Control 4. Previously, the contact's shipping information automatically populated the Ship-To address. However, now the user must have a way of indicating that the order will be picked up (and use the ship-from address instead of a different address).

The Ship-To address should now be reworked to be a drop-down box. The drop-down box should have the following entries (in this order):

  • Local/Pick-Up
  • Contact Shipping - The shipping address of the contact.
  • Contact - Other addresses from the contact record.
  • Customer Shipping - The main shipping address of the customer.
  • Customer Billing - The customer's billing address.
  • Customer > - Other addresses for the customer record.
  • Choose … - Some option to allow the customer to choose an alternate address.

For line items, the Ship-To value will function as it currently does, though the interface should change to match the order. That is, the Ship-To will default to the order's Ship-From value. However, on the advanced screen for the line item the user should have the ability to change this setting. The same drop-down and options should be given to the user.

Although there is no change in the functionality associated with the billing address for an order, it should be visually reworked with a drop-down similar to the others. The entries in the drop-down box should be (in this order):

  • Contact Billing - The contact's billing address.
  • Contact Shipping - The shipping address of the contact.
  • Contact - Other addresses from the contact record.
  • Customer Billing - The customer's billing address.
  • Customer Shipping - The main shipping address of the customer.
  • Customer > - Other addresses for the customer record.
  • Choose … - Some option to allow the customer to choose an alternate address.

It is also possible that the Internet might be down when an order is being put in. In that case, it would not be possible to perform a tax calculation. Regardless, it is desirable that the user be allowed to put in as much information as possible

The order record (TransHeader) and line item (TransDetail) each need a boolean field to indicated whether the Tax Calculations are valid. When they are not valid, the following fields should be affected:

  • The IsValidTax field should be set to False
  • Any tax amounts in the database should be written as NULL
  • The salestotal fields should also be NULL
  • All other fields based on SalesTotal, including BalanceOustanding should be NULL

Care should be taken that if an order was 100% prepaid with tax, then the absence of tax should not automatically create an overpayment. The rule should be that if Tax is not able to be computed, then it should not consider anything an overpayment or adjust any payments.

As a store option, the full tax information retrieved for each line item will be stored in the TransTax table. Separate records for each tax will be created. The data should be stored as an XML blob field. The name of the tax should be stored in a field for easy access for reporting.

In previous versions of Control, the tax was calculated each time any variable or modifier or part in the order changed. The speed when calculating taxes from internal table makes this real-time approach practical. However, sending even a simple message across the Internet and receiving a response message will normally take a minimum of 0.4 seconds (though normally 0.6 or more should be expected). This delay would be very noticeable, hamper efficiency, and aggravate the user.

For these reasons, a tax-lock mechanism should be incorporated when using online tax lookup.

Taxes are looked up on the following conditions:

  • The user clicks on a “Lookup Taxes” button.
  • The user saves the order or estimate.

Taxes in Control are calculated at the line item level. When an order is set to “Lookup Taxes Online”, all line items default to this tax classification.

Whenever taxes are looked up, they are looked up for the entire order (all line items), even if the lookup request is generated for a single line item.

Line items may only be set to “Lookup Taxes Online” when the order has “Lookup Taxes Online” as its default tax class. Line items may override their orders tax class, but they may not to lookup taxes.

If the order is set to “Lookup Taxes Online”, the line item may override this setting to a static tax class. If the line item is overridden to use a static tax class, it will be calculated manually and not included in the tax record sent to AvaTax. This will result in parts of the order showing up on both the Cyrious Control internal tax reports and the AvaTax online tax reports; each for their corresponding amount.

When a tax lookup event is triggered, the following sequence of events happens:

  1. A “Looking up Online Taxes” dialog is displayed
  2. An order-level tax message is created containing:
    1. The source and destination address for the order.
    2. The source and destination address for each line item, if overridden.
    3. The product, pre-tax sale amount, and product tax code for each line item.
  3. Each Source address is validated as it is added to the message if it is not already validated.
  4. Each Destination address is validated as it is added to the message if it is not already validated. On average, this is expected to produce less than one address validation messages per order (since orders to repeat addresses should already be validated.)
  5. Control sends a message to the SSLIP requesting tax information lookup.
  6. The SSLIP sends a request to AvaTax requesting tax information lookup.
  7. AvaTax responds to the SSLIP with the information.
  8. The SSLIP responds to Control with the information.
  9. Control returns the requested tax rates.

Taxes are posted to AvaTax when an order is marked Sale. Prior to that time, all requests for tax lookup are done without committing the order, and AvaTax will not recognize the tax as having been incurred. This can be done as a quote.

The same order number should be used for all Tax lookup calculations for an order. To differentiate orders from estimates, Orders numbers should be prefixed with “o” and estimates should be prefixed with “e”. For example, Order 1234 would be referenced in AvaTax as o1234 and Estimate 5678 would be references in AvaTax as e5678.

Estimate edits cause the estimate taxes to be recalculated. The lookup is done as if it were a new estimate, but using the existing estimate number (preceded by the letter “e” as indicated elsewhere).

Edits to Orders in WIP and Built causes the taxes to be recalculated. The lookup is done as if it were a new order, but using the existing order number (preceded by the letter “o” as indicated elsewhere).

Once an order is a sale, it has already been recorded in the AvaTax system. As such, changes must be made to reverse the effects of previous taxes and post the new taxes. This is accomplished in the following manner:

  1. A copy of the original order is made in memory.
  2. When the order is revised, the system scans the original and new order to determine if any of the following have changed for any line item: subtotal, product, tax class, tax exempt status.
  3. If none of those have changed, the order original taxes are retained and nothing further (tax-wise) is done.
  4. If any of the line items have changed, a negative copy of the original order is made. To make a negative copy, each line item is made negative. The letter “o” (for original) is also appended to the line item number.
  5. The line items for the negative original order is then added to the new order. This produces an order with two line items for most line items: one positive for the new value and one negative with the original value.
  6. The combined order is submitted for tax posting. This will post a negative or positive value based on the changes made.
  7. Since AvaTax won't accept two final orders with the same number, the revision number of the order should be appended to the order number. The original order 1234 will be known as “o1234”. The first adjustment (after sale) for that order would be “o1234a”, the second “o1234b”, and so forth.

When an order is marked “Sale”, the tax event occurs and the taxes are recorded in the AvaTax system.

If the SSLIP is unable to connect to AvaTax to lookup the taxes, the user will receive a message such as

The system was unable to connect to AvaTax to record the taxes. Therefore, this order cannot be changed to Sale at this time. Please contact your system administrator or try again later.

Message from SSLIP:

The appropriate reason message (such as “Could not connect to AvaTax”, “Account not authorized”, etc.) should be inserted into this message.

A log of the attempt and message should be created.

Existing orders should remain in his previous state (WIP or BUILT). If Cyrious is configured to save new orders automatically in a SALE status, the order should remain unsaved and the user should be left in edit mode.

When the changes do not create a taxable event, and SSLIP is unable to connect to AvaTax to lookup the taxes, the order is still saved but the following things should also occur:

  1. The user should be notified with a message like:

The system was unable to connect to AvaTax to record the taxes. Therefore, the taxes could not be computed at this time. The order (or estimate) will still be saved but the taxes are left undetermined. This may affect the way your invoice or other reports print. Please contact your system administrator or try again later.

Message from SSLIP:

  1. An activity should be created, or notes should be made in the edit/creation activity, indicating the reason the connection could not be made.
  2. The order is saved with an invalid tax state as indicated elsewhere.

If the SSLIP is unable to connect to AvaTax when editing an Estimate or Order in WIP/Built, the procedure is identical to that for in the preceding section (Converted Estimates, etc.); that is, the user is notified but the save is allowed. The order is saved but with an invalid tax state.

If the order is already a Sale, however, the save may not take effect because the tax changes cannot be posted. Therefore, the procedure should be identical to that when changing the status to a sale; that is, the user is notified and the save is NOT allowed.

Voiding an order that is already a Sale is the (accounting) equivalent to editing it down to zero. Therefore, the procedure is the same as for edits, based on the status of the order.

If no connection can be made when voiding an estimates or a orders in WIP or built, the void is allowed and the tax is left in an invalid state. If the order is in a Sale status, the void is NOT allowed.

When taxes are locked (not being calculated) for a line item, the column on the Items tab that normally shows the tax amount should instead have a button that says “Calc. Taxes” (or similar). Clicking this button should recalculate the taxes for the entire order.

The sales total (after tax) column should display the text “not available” (or similar) if the taxes are not known on that line item.

When taxes are locked (not being calculated) for an order, there needs to be a button on the Total tab (near the taxes) that says “Calc. Taxes” (or similar). Clicking this button should recalculate the taxes for the entire order.

GO to the AvaTax Developer Admin URL supplied in the license details email:

https://admin-development.avalara.net/

  1. Sign in using the Admin Username and Admin Password
  2. Click on the Organization link
  3. Create an account and set the Company Code. The company code will be needed for Control to use Avatax.

4. On the Organization page, click the button under the State Nexus column.

5. Select the states that the company will retrieve the online taxes for.

6. Click Save to save the changes.

Some states have special taxes for different counties. All special taxes that must be accounted for must be manually selected in Avatax. Ex. Georgia has special taxes for Appling County.

  1. Go to the Organization page
  2. Click on the local Nexus button

  1. Select the state (in this case Georgia)

  1. Click the arrow to force the webpage to refresh with all of the special taxes for Georgia.
  2. Select all special taxes that apply.
  3. Click Save to save the settings.

Go to Setup » System Setup » Accounting » Online Tax Options

Authorize the key for Online Taxes

Check the Enable Online Tax Lookup option.

Fill in the AvaTax information using the license information obtained from Avalara.

Fill in the Company Code with the Company Code from the AvaTax web site.

Set the URL to the AvaTax Developer Server URL provided in the email.

In order to use Avatax's feature to calculate taxes for shipping to different states and using each state's tax rules for shipping, all shipping products will have to be set to use the Shipping Taxability Code.

AvaTax uses the Product Code FR020100.

Set the default tax class.

Validating Address with AvaTax

Order Entry

Before retrieving taxes from AvaTax, the addresses are validated to guarantee an accurate calculation.

Before taxes are retrieved from AvaTax

After taxes are retrieved from AvaTax

Tax breakdown

Line Item tab

See the Registering Avalara DLLs Manually section on setting_up_online_taxes_avalara.

Contributor: Development Team, Cyrious Software

Date: 07/23/2009

Version: Control 4.1

You could leave a comment if you were logged in.