# 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.
