taxjar-calcorado-node
Version:
Processes Colorado multiple home rule city data for TaxJar API calculations
157 lines (141 loc) • 3.58 kB
Markdown
# TaxJar-Calcorado-Node
**Disclaimer: This package has no endorsement, maintenance, or support by [TaxJar](HTTP://www.taxjar.com), its employees, or affiliates.**
To support a business that has Colorado multiple Home-Rule city nexus, the TaxJar API for sales tax calculations [/v2/taxes](https://developers.taxjar.com/api/reference/#taxes) requires `"nexus_addresses"` specification of which home-rule city sales tax should apply.
In order to simplify the requirement, this package allows sending all home-rule city nexus addresses into your request body. It uses a straight-forward comparison to look at the `"to_city"` to determine which `"nexus_addresses"` should apply.
## Installation
Use the package manager [npm](https://www.npmjs.com/) to install taxjar-calcorado-node.
```bash
npm install taxjar-calcorado-node
```
Alternatively, the entire code used to make this work is pretty straight-forward:
```
module.exports = (apiReq) => {
let toCity = apiReq.to_city.toUpperCase();
let nexusAddresses = apiReq.nexus_addresses;
nexusAddresses.forEach((address, idx, array) => {
if (toCity.localeCompare(address.city.toUpperCase()) == 0) {
apiReq.nexus_addresses = address;
return apiReq
}
if (idx === array.length - 1 && apiReq.nexus_addresses.length > 1) {
delete apiReq.nexus_addresses;
return apiReq
}
});
}
```
## Usage
### Require the package
```const calcorado = require('taxjar-calcorado-node');```
### Pass all CO nexus_addresses to request
Assuming shipping details are available, here's the request body:
```
taxCalc = {
to_country: 'US',
to_zip: '80217',
to_state: 'CO',
to_city: 'Centennial',
to_street: '7526 E 53rd Pl',
amount: 15,
shipping: 1.5,
nexus_addresses: [],
line_items: [
{
id: '1',
quantity: 1,
product_tax_code: '',
unit_price: 15,
discount: 0
}
]
}
```
..and here's where we conditionally tie in all home-rule city addresses:
```
if (taxCalc.toState == 'CO') {
taxCalc.nexus_addresses = [
{
id: 'Denver Nexus',
country: 'US',
zip: '80217',
state: 'CO',
city: 'Denver',
street: '7550 E 53rd Pl'
},
{
id: 'Boulder Nexus',
country: 'US',
zip: '80302',
state: 'CO',
city: 'Boulder',
street: '1905 15th St'
},
{
id: 'Centennial Nexus',
country: 'US',
zip: '80122',
state: 'CO',
city: 'Centennial',
street: '2221 E Arapahoe Rd'
},
{
id: 'Centennial Nexus',
country: 'US',
zip: '80122',
state: 'CO',
city: 'Centennial',
street: '2221 E Arapahoe Rd'
},
{
id: 'Central City Nexus',
country: 'US',
zip: '80427',
state: 'CO',
city: 'Central City',
street: '149 Gregory St'
}
];
}
```
### Call the package, send the new calc to TaxJar
```
newTaxCalc = calcorado(taxCalc);
```
The new request:
```
{
to_country: 'US',
to_zip: '80217',
to_state: 'CO',
to_city: 'Centennial',
to_street: '7526 E 53rd Pl',
amount: 15,
shipping: 1.5,
nexus_addresses: [
{
id: 'Centennial Nexus',
country: 'US',
zip: '80122',
state: 'CO',
city: 'Centennial',
street: '2221 E Arapahoe Rd'
}
],
line_items: [
{
id: '1',
quantity: 1,
product_tax_code: '',
unit_price: 15,
discount: 0
}
]
}
```
```
client.taxForOrder(newTaxCalc);
```
## Contributing
Pull requests are welcome.
## License
[ISC](https://opensource.org/licenses/ISC) / Open-source.